C 11 帶來的新特性 (1)

2022-07-03 12:48:14 字數 2569 閱讀 3039

vector>;   //error

vector>; //ok

vector>;   //ok
void f(int);

void f(void*);

f(0); //call f(int)

f(null); //有歧義

f(nullptr);//call f(void*)
auto i = 42;   //int

double f();

auto d = f(); //double

auto n; //error

static auto vat = 0.19;

vectorv;

auto pos = v.begin();

auto f = (int x)-> bool

基本形式:

for( decl : coll )
等價於:

for( auto _pos = coll.begin(), _end = coll.end(); _pos != null; ++_pos)
或者(其中begin()和end()是全域性函式):

for( auto _pos = begin(coll), _end = end(coll); _pos != null; ++_pos)
for( int i :  )
std::vectorvec;

...for( auto & elem : vec )

template < typename t>

void printelements( const t& coll )

}

template < typename t>

void printelements( const t& coll )

}

get() const   

private:

int m_data;

};ostream& operator<<(ostream& os, const x& x)

int main();

cout << "\nelements:\n";

for (auto x : v)

return 0;

}

輸出:

x copy ctor.

x copy ctor.

x copy ctor.

x copy ctor.

x copy ctor.

elements:

x copy ctor.

1 x copy ctor.

3 x copy ctor.

5 x copy ctor.

7 x copy ctor.

9

為了防止呼叫拷貝建構函式,提高下率,加上引用。

for (auto &x : v)

執行輸出:

x copy ctor.

x copy ctor.

x copy ctor.

x copy ctor.

x copy ctor.

elements:

1 3 5 7 9

發現已經不呼叫拷貝建構函式了。

class c  ;

int main()

}

報錯。去掉「explicit」後,可正常執行。

invalid initialization of reference of type 『const c&』 from expression of type 『std::__cxx11::basic_string』
在字串前面加上關鍵字r,表示這是乙個原始字串。

下面這兩個是等效的。

"\\\\n"

r"\\n"

下面這兩個也是等效的。

r"nc(a\

b\nc()"

)nc";

"nc(a\\\n b\\nc()\"\n )nc";

使用編碼字首制定字串編碼。如下

l"hello"    // 定義wchar_t編碼的字串
字首有以下幾種:

- u8表示utf-8編碼。

- u表示char16_t

- u表示char32_t

- l表示寬字符集,型別wchar_t

c++11中的列舉型別如下所示:

enum class salutation : char ;

C 11 帶來的新特性 (1)

vector error vector okvector okvoid f int void f void f 0 call f int f null 有歧義f nullptr call f void auto i 42 int double f auto d f double auto n err...

c 11 新特性學習(1)

1.原始字面量 在 c 11 中新增了定義原始字串的字面量,定義方式為 r 原始字串 其中 兩邊的字串可以省略。原始字面量 r 可以直接表示字串的實際含義,而不需要額外對字串做轉義或連線等操作。如 n t縮排這種 比如 程式設計過程中,使用的字串中常帶有一些特殊字元,對於這些字元往往要做專門的處理,...

c 11的新特性

1 型別說明符auto 2.decltype提取型別 int a 0 decltype a b b 10 cout b endl 3.基於範圍的for迴圈 4.虛函式的override和final指示符 final修飾類 類無法被繼承 final修飾虛函式 虛函式不能被重寫 override就是輔助...