C 11常用特性介紹 列表初始化

2022-08-29 02:36:13 字數 1969 閱讀 2055

一、列表初始化

1)c++11以前,定義初始化的幾種不同形式,如下:

int data = 0;   //賦值初始化

int data = ;   //花括號初始化

int data(0);  //構造初始化

2)c++11以舊語法中花括號初始化形式為基礎,設計了列表初始化語法,統一了不同的初始化形式

a)資料型別 變數

//聚合型別

struct persion

char name[64];

struct date//成員是聚合型別

int year;

int month;

int day;

}age;

class student

public:

student(int year,int month,int day) : _year(year),_month(month),_day(day) {}

friend std::ostream& operator << (std::ostream &os, student const & s)

os << s._year << "-" << s._month <<  "-" << s._day;

private:

int _year;

int _month;

int _day;

int main()

int a;

std::cout << a << std::endl;

double b;

std::cout << b << std::endl;

//聚合型別(任意型別的陣列)

int c;

copy(c,c + sizeof(c) / sizeof(c[0]),ostream_iterator(cout, " "));

std::cout << std::endl;

persion persion;

std::cout << persion.name << persion.year << persion.day << std::endl;

student student;

std::cout << student << std::endl;

聚合型別

1)任意型別的陣列

2)滿足特定條件的類:

a、無自定義的建構函式

b、無私有或保護的非靜態成員變數

c、無基類

d、無虛函式

e、無通過「=」或者「{}」豐類宣告部分被初始化的非靜態成員變數

3)聚合型別的元素或者成員可以是聚合型別也可以是非聚合型別

4)對聚合型別使用列表初始化,相當於用列表初始化的值作為引數,呼叫相應的建構函式。

b)變長初始化列表:initializer_list

class num

public:

num(std::initializer_list list)

for(auto i : list)

_vector.push_back(i);

friend std::ostream& operator << (std::ostream &os, num n)

//copy(n._vector.begin(),n._vector.end(),ostream_iterator(os," ");

for(auto i : n_vector)

os << i << " " ;

return os;

private:

std::vector_vector;

int main()

num num;

std::cout << num << std::endl;

initializer_list作為輕量級的列表容器,不但可以用在建構函式中,也可以作為普通函式的引數,傳遞不定數量的實參,

相對於傳統標準容器,效率更高(輕量級列表容器,僅儲存初始化列表元素的引用,而非其副本)

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

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標準支援了就地初始化非靜態資料成員的同時,初始化列表的方式也被保留下來,...