C 17 之 新的 初始化規則

2021-08-18 16:43:21 字數 1116 閱讀 4896

c++11 引入列表初始化, 即使用的方式對聚合型別進行初始化.

聚合型別在 iso/iec14882:2017 11.6.1

描述, 表示陣列或類:

c++11 的列表初始化規則, 在與 auto

聯合使用時經常無法達到程式設計師的期望並出錯, 因此 c++17

對列表初始化規則進行增強.

在使用具體資料型別 (不需要對 auto 進行推導) 的情況, 初始化結果比較直觀.

在初始化容器型別時 (如 std::vector, std::list), 初始化列表會與其乙個帶有

std::initializer_list的建構函式匹配.

/* 以下三種初始化方法效果等同 */

int x1 = 1;

int x2 ;

int x3 (1);

/* 以下三種初始化方法效果不盡相同 */

// 初始化後, vector 擁有三個 int 型別的數: 1, 2, 3

// 呼叫了建構函式 std::vectorv (std::initializer_list)

std::vector

v1 ;

// 同上

std::vector

v2 = ;

// 初始化後, vector 有 10 個 int 型別數, 每個數值為 20

// 呼叫了建構函式 std::vector(n, value)

std::vector

v3 (10, 20);

auto v   ;         // v 推導為 int

auto w ; // error: 初始化列表只有為單元素

/* 下面是 c++17 增加的新規則 */

auto x = ; // x 推導為 std::initializer_list

auto y = ; // y 推導為 std::initializer_list

auto z = ; // error: 初始化列表中的元素型別必須相同

c++17 對初始化列表規則的增強可以總結為:

c 17之 if和switch語句中初始化變數

從c 17開始,if和switch控制結構現在允許我們在條件語句或選擇子句旁邊指定乙個初始化子句。例如 if int result getresult result 1 result 變數的有效範圍到此為止。1.首先介紹下if判斷語句中變數的初始化 在if語句中初始化的任何值在then和else部分...

c 變數初始化規則

include include include include include using namespace std define num 10000 class bclass 對於常量型成員變數和引用型成員變數,必須通過引數化列表的方式進行初始化 普通成員變數也可以放在函式體裡,但是本質其實已不...

C 變數初始化規則

1 定義變數的時候,如果沒有初始化,它的值是什麼呢?它的值取決於變數的型別和變數定義的位置。2 考慮基本型別的變數,定義時沒有初始化。如果定義在方法外部,初始化為0,如果定義在方法內部,不被初始化。使用未初始化的變數,導致未定義行為。未初始化的變數事實上,也有乙個值,這個值是隨機的。因此強烈建議,基...