专业编程基础技术教程

网站首页 > 基础教程 正文

C++11列表初始化 c++列表初始化格式

ccvgpt 2024-10-10 05:02:13 基础教程 51 ℃

大家好我是发哥,本期说说C++11列表初始化。

我们知道,在 C++98/03 中的对象初始化方法有很多种,请看下面的代码:

C++11列表初始化 c++列表初始化格式

int arry[3] = { 1, 2, 3 }; //普通数组

struct A

{

int x;

struct B

{

int y;

int z;

} b;

} a = { 1, { 2, 3 } }; //POD类型

int i = 0;//拷贝初始化(copy-initialization)

class Food

{

public:

Food (int) {}

} food = 123; //需要拷贝构造函数

int j(0);//直接初始化(direct-initialization)

Food bar(123);//直接初始化(direct-initialization)

上述这些有不同的初始化方法,都有各自的适用范围和作用。最关键的是,这些种类繁多的初始化方法,没有一种可以通用所有情况,使用起来比较不方便。

为了统一初始化方式,并且让初始化行为具有确定的效果,C++11 中提出了列表初始化(List-initialization)的概念。

初始化列表的适用性被大大增加了。它现在可以用于任何类型对象的初始化,请看下面的代码。


通过初始化列表初始化对象。

class Food

{

public:

Food (int) {}

private:

Food (const Foo &);

};

int main(void)

{

Food a1(235);

Food a2 = 235; //错误Food (const Food &)是私有的

Food a3 = { 235 };

Food a4 { 235 };

int a5 = { 457 };

int a6 { 459 };

return 0;

}

上例中,a3、a4 使用了新的初始化方式来初始化对象,效果如同 a1 的直接初始化。

a5、a6 则是基本数据类型的列表初始化方式。可以看到,它们的形式都是统一的。

a4 和 a6 的写法,是 C++98/03 所不具备的。在 C++11 中,可以直接在变量名后面跟上初始化列表,来进行对象的初始化。

由上面的这些例子可以看到,在 C++11 中使用初始化列表是非常便利的。它不仅统一了各种对象的初始化方式,而且还使代码的书写更加简单清晰。

今天就说到这,谢谢你的关注,记得点赞、评论和关注哦,后期会有更好的优秀作品呈现,你的支持是我创建继续创造优秀作品的动力。

明天早上六点我们继续再聊。

最近发表
标签列表