C 11 列表初始化及類內初始化

2021-10-25 14:35:08 字數 2446 閱讀 7180

c++11中,集合(列表)的初始化已經成為c++語言的乙個基本功能,這種初始化的方法被稱為「初始化列表」(initializer list),例如:

#include

#include

using

namespace std;

int a=

;int b;

vector<

int> c

;map<

int,

float

> d =,,

};

這樣一來,自動變數和全域性變數的初始化在c++11中被豐富了,程式設計師可以使用以下幾種形式完成初始化的工作 :

後面2種形式也可以用於獲取堆記憶體new操作符中,比如:

int

* i =

newint(1

);double

* d =

newdouble

;

自定義的類如果要使用初始化列表初始化,需要#include標頭檔案,並且宣告乙個以initializer_list模板類為引數的建構函式:

#include

#include

using

namespace std;

enum gender

;class

people

private

: vector> data;};

people ship2012 =,}

;

同樣的,函式的引數列表也可以使用初始化列表:

#include

using

namespace std;

void

fun(initializer_list<

int> iv)

intmain()

);fun();

// 空列表

}

可有接收任意個數的初始化值

void

print

(std::initializer_list<

int> vals)

}print()

;// pass a list of values to print()

列表初始化語法對於stl容器和自定義類作用很大(尤其是一些測試**),但對於陣列等型別就沒必要強制使用了。總的來說,這是乙個能在部分場景下大大提高效率的值得推廣的特性。

int i

;int i =

;int i =0;

inti(0

);float f

;float f =

;float f =

3.6;

floatf(

3.6)

;char charr=

;char charr;

char

* c =

newchar

;char

* c =

newchar

(`g`)

;

char charr;

char charr=

;

std::vector<

int> v =

;std::vector<

int> v

;std::pair<

int, std::string> p =

;

2.4.1 函式引數

大括號表示式做實參傳入時,會構造乙個initializer_list物件。

#include

#include

void

displayint

(const std::initializer_list<

int>

& ivec)

}int

main()

);return0;

}

2.4.2 函式的返回值在c++03中對類的成員變數初始化有兩種方式:

一般前者效率會更高。

在c++11中為了避免當內部成員變數較多時,初始化列表顯得冗長,開始支援在成員變數中宣告時,直接對其進行賦值操作或者初始化列表。

class

test

private

:int value =0;

std::string name ;}

;

其執行的順序為:

直接賦值操作

初始化列表

建構函式內部初始化

其三者可以同時使用,不衝突。

注意:c++11 中不支援在類內部用小括號進行直接賦值操作。

C 11 就地初始化與列表初始化

在 c 11 之前,只能對結構體或類的靜態常量成員進行就地初始化,其他的不行。class c class c or int b c 11 only int c 7 error 注意,小括號初始化方式不能用於就地初始化。c 11 支援了就地初始化非靜態資料成員的同時,初始化列表的方式也被保留下來,也就...

c 11 就地初始化與列表初始化

還可以看看 在c 11之前,只能對結構體或類的靜態常量成員進行就地初始化,其他的不行。class c class c 或int b c 11 only int c 7 error 1.2就地初始化與初始化列表的先後順序 c 11標準支援了就地初始化非靜態資料成員的同時,初始化列表的方式也被保留下來,...

C 11之列表初始化

c 98使用 對陣列初始化 int arr int arr 4 但對於自定義型別會報錯 vectorv 內建型別 int x1 int x2 int x3 1 2 int x4 int x5 陣列 int arr1 5 int arr2 動態陣列 c 98不支援 int arr3 new int 5...