span表示一段連續的記憶體,像陣列一樣,但它不擁有或管理這段記憶體,即它是「view」,大致上就是struct ,所以span具有三個特徵:
span的三個特徵決定了它主要應用場合包括:
上面兩點都可以提高**的可讀性和安全性。
下面是乙個std::span的示例。
template[[nodiscard]]
constexpr auto slide(std::spans, std::size_t offset, std::size_t width)
template[[nodiscard]]
constexpr bool starts_with(std::spandata, std::spanprefix)
template[[nodiscard]]
constexpr bool ends_with(std::spandata, std::spansuffix)
template[[nodiscard]]
constexpr bool contains(std::spanspan, std::spansub)
void print(const auto& seq)
int main()
; std::vectorb=;
auto s1 = slide(std::span, 3, 4);
print(s1);
std::cout《上例中,通過span對陣列的包裝,使得對陣列的操作完全變成了一種類似「集合」的操作。
std::bind_front定義在中,與std::bind功能類似,都可以對函式進行包裝,然後在方便的時候呼叫。
對於函式f(arg1,arg2…)
std::bind的用法是
在定義時,bindfun=std::bind(f,[arg,placeholder...]),arg和placeholder的總個數與f的引數一致;
使用時,bindfun([arg,..]),arg的個數與placeholder的個數一致,用以替代定義時的placeholder。
std::bind_front的用法是
在定義時,bindfun=std::bind_front(f,[arg…]),arg是f的前n個引數(n為0至f引數的個數,bind front的意思由此而來,就是繫結前n個引數);
使用時,bindfun([arg,…]),arg是剩餘的f的引數。
void test_bind()
;
auto aa = std::bind_front(calc, 1,2);
std::cout << aa (3)<<"\n";
auto bb = std::bind_front(calc, 1,2,3);
std::cout << bb ()<<"\n";
auto cc=std::bind(calc, 1,std::placeholders::_2,std::placeholders::_1);
std::cout《從上面的示例,如果僅按順序bind呼叫,std::bind_front的寫法要簡單些,但使用placeholder佔位符後,可以更靈活的方式「掩蓋」原有的引數呼叫方式,std::bind_front就顯得呆板些,而不能完成。
C 2 0的新特性
c 2.0的新特性 1 區域性型別 就是把乙個類 介面,結構 分成幾部分,系統編譯時自動的組合 利用關鍵字partial修飾 partial class a partial class a 只要類的一部分繼承乙個父類,那整個類都繼承。沒一部分都可以繼承乙個介面,則整個類繼承所有介面 類的一部分一但被...
C 2 0 有哪些新特性?
泛型 在我看來,泛型就是通過將資料型別引數化從而實現了 的更為靈活的復用,泛型的出現使得c 能夠使用同一段 來操作多種資料型別。泛型無疑是c 2.0最重大的改進,它的出現賦予了c 更強的型別安全,更好的復用,更高的效率和更清晰的約束。匿名方法 匿名方法允許我們將 直接與委託例項相關聯,使委託例項化工...
從C 2 0新特性到C 3 5新特性
一 c 2.0 新特性 1 泛型 listobj list new list obj list.add new myobject 2 部分類 partial namespace set 或在另乙個檔案中 public partial class class1 3 靜態類 public static ...