亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

簡(jiǎn)述C++11就地初始化與列表初始化

 更新時(shí)間:2020年08月12日 10:31:27   作者:Dabelv  
這篇文章主要介紹了C++11就地初始化與列表初始化的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)C++,感興趣的朋友可以了解下

1.就地初始化

1.1簡(jiǎn)介

在C++11之前,只能對(duì)結(jié)構(gòu)體或類的靜態(tài)常量成員進(jìn)行就地初始化,其他的不行。

class C
{
private:
	static const int a=10;	//yes
	int a=10;					//no
}

在C++11中,結(jié)構(gòu)體或類的數(shù)據(jù)成員在申明時(shí)可以直接賦予一個(gè)默認(rèn)值,初始化的方式有兩種,一是使用等號(hào)“=”,二是使用大括號(hào)列表初始化的方式。注意,使用參考如下代碼:

class C 
{
private: 
 int a=7; 	//C++11 only
 int b{7}; //或int b={7}; C++11 only
 int c(7);	//error
}; 

注意,小括號(hào)初始化方式不能應(yīng)用于就地初始化。

1.2就地初始化與初始化列表的先后順序

C++11標(biāo)準(zhǔn)支持了就地初始化非靜態(tài)數(shù)據(jù)成員的同時(shí),初始化列表的方式也被保留下來(lái),也就是說(shuō)既可以使用就地初始化,也可以使用初始化列表來(lái)完成數(shù)據(jù)成員的初始化工作。當(dāng)二者同時(shí)使用時(shí),并不沖突,初始化列表發(fā)生在就地初始化之后,即最終的初始化結(jié)果以初始化列表為準(zhǔn)。參考如下代碼:

#include <iostream>
using namespace std;

class Mem
{
public:
	Mem(int i,int j):m1(i),m2(j) {}

	int m1 = 1;
	int m2 = {2};
};

int main()
{
	Mem mem(11,22);
	cout<<"m1="<< mem.m1<<" m2="<<mem.m2<<endl;
}

程序輸出結(jié)果:

m1=11 m2=22

2.列表初始化

C++11之前主要有以下幾種初始化方式:

//小括號(hào)初始化
string str("hello");

//等號(hào)初始化
string str="hello";

//POD對(duì)象與POD數(shù)組列表初始化
struct Studnet
{
	char* name;
	int age;
};
Studnet s={"dablelv",18}; //純數(shù)據(jù)(Plain of Data,POD)類型對(duì)象
Studnet sArr[]={{"dablelv",18},{"tommy",19}}; //POD數(shù)組

//構(gòu)造函數(shù)的初始化列表
class Class
{
	int x;
public:
	Class():x(0){} 
};

這么多的對(duì)象初始化方式,不僅增加了學(xué)習(xí)成本,也使得代碼風(fēng)格有較大出入,影響了代碼的可讀性和統(tǒng)一性。從C++11開(kāi)始,對(duì)列表初始化(List Initialization)的功能進(jìn)行了擴(kuò)充,可以作用于任何類型對(duì)象的初始化,至此,列表初始化方式完成了天下大一統(tǒng)。

class Test
{
 int a;
 int b;
public: 
 C(int i, int j); 
}; 
Test t{0,0};     //C++11 only,相當(dāng)于 Test t(0,0); 
Test* pT=new Test{1,2};  //C++11 only,相當(dāng)于 Test* pT=new Test{1,2};
int* a = new int[3]{1,2,0}; 	//C++11 only

此外,C++11列表初始化還可以應(yīng)用于容器,終于可以擺脫 push_back() 調(diào)用了,C++11中可以直觀地初始化容器:

//C++11 container initializer
vector<string> vs={"first", "second", "third"};
map<string,string> singers ={{"Lady Gaga", "+1 (212) 555-7890"},{"Beyonce Knowles", "+1 (212) 555-0987"}};

因此,可以將C++11提供的列表初始化作為統(tǒng)一的初始化方式,既降低了記憶難度,也提高的代碼的統(tǒng)一度。

以上就是簡(jiǎn)述C++11就地初始化與列表初始化的詳細(xì)內(nèi)容,更多關(guān)于C++11就地初始化與列表初始化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論