日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C11的新特性

發布時間:2023/12/20 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C11的新特性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.類型推導

auto定義的變量可以根據初始化的值,在編譯是推導出變量名的類型。

并不能代表一個實際的類型聲明,只是一個類型聲明的“占位符”。

使用auto聲明的變量必須有初始化值,方便編譯器推斷出它的實際類型

,并在編譯時替換成真正的數據類型。

兩條規則:

1)當不聲明為指針或引用時,auto的推導結果和初始化表達式拋棄引用和cv限定符后類型一致。

2)當聲明為指針或引用時,auto的推導結果將保持初始化表達式的cv屬性。

總結:

1、C11中auto成為類型指示符(type-specifier)。

2、auto不能用于函數參數。

3、auto不能用于非靜態成員變量

4、auto無法定義數組

5、實例化模板時不能使用auto作為模板參數。

2.decltype關鍵字

從格式上來看,decltype 很像sizeof-—用來推導表達式類型大小的操作符。類似于sizeof,decltype 的推導過程是在編譯期完成的,并且不會真正計算表達式的值。

例:

int main(){int x = 10;decltype(x)y = 1;// y => int decltype(x+y) Z= 0;// y = int;const int &i= x;decltype(i)j= y; //j= const int &;const decltype(z)*p= &z;// *p=> const int,p= const int*decltype(z)*ip= &z;//*ip=> int,ip=>int*decltype(pi)*pp = &ip // *pp => int *,pp → int;}

3.基于范圍的for循環

以下是基于范圍的for循環的一般格式:

for(ElemType val:array) ? { ? ...// statement 循環體 ? }

ElemType∶是范圍變量的數據類型。它必須與數組(容器元素的數據類型一樣,或者是數組元素可以自動轉換過來的類型。

val∶是范圍變量的名稱。該變量將在循環迭代期間依次接收數組中的元素值。在第一次循環迭代期間,它接收的是第一個元素的值;在第二次循環迭代期間,它接收的是第二個元素的值;以此類推。

array∶是要讓該循環進行處理的數組(容器)的名稱。該循環將對數組中的每個元素迭代一次。

statement∶是在每次循環迭代期間要執行的語句。要在循環中執行更多的語句,則可以使用一組大括號來包圍多個語句。與其他循環體一樣,可以用continue來結束本次循環,也可以用break來跳出整個循環。

4.指針空值——nullptr

nullptr是有類型的,且僅可以被隱式轉換為指針類型

nullptr和 nullptr_t

C11標準不僅定義了指針空值常量 nullptr,也定義了其指針空值類型 nullptr_t,也就表示了指針空值類型并非僅有 nullptr一個實例。通常情況下,也可以通過nullptr t來聲明—個指針空值類型的變量(即使看起來用途不大)。

除去 nullptr及 nullptr t以外,C++中還存在各種內置類型。C++11標準嚴格規定了數據間的關系。大體上常見的規則簡單地列在了下面∶

所有定義為 nullptr_t類型的數據都是等價的,行為也是完全一致。

nullptr_t類型數據可以隱式轉換成任意一個指針類型。nullptr_t類型數據不能轉換為非指針類型,即使使用的方式也是不可以的

reinterpret_cast<nullptr_t>O); ? int main() ? { ? int a= nullptr;// error; ? int *p= nullptr; // ok; ? char *cp= nullptr; // ok; ? }

nullptr_t類型數據不適用于算術運算表達式。

nullptr_t類型數據可以用于關系運算表達式,但僅能與nullptr t類型數據或者指針類型數據進行較,當且僅當關系運算符為=、<=、>=等時返回 true。

注意∶

1、nullptr 是C11新引入的關鍵字,是一個所謂"指針空值類型"的常量,在C++程序中直接使用。

2、在C11中,sizeof(nullptr)與sizeof(void*)0)所占的字節數相同都(4,或8)。

3、為了提高代碼的健壯性,在后續表示指針空值時建議最好使用nullptr。

5.typedef與using

typedef unsigned int uint; ? using uint = unsigned int; ? ? ? template<class__Ty> ? using pointer = _Ty *; ? int main() ? { ? int x = 10; ? double dx = 12.25; ? pointer<int>ip=&x; ? pointer<double> dp = &dx; ? return 0; } ?

指針類型:

野指針:int *p;

空指針:int *sp=nullptr;

失效指針:sp=new int(10); delete sp;//變成失效指針

總結

以上是生活随笔為你收集整理的C11的新特性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。