C 20新特性 span與bind front

2021-10-19 07:33:21 字數 1588 閱讀 4583

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 ...