C++11之列表初始化

本文详细介绍了C++11引入的列表初始化特性,包括其用于任何类型对象初始化的能力,如何在变量声明、new操作符、函数返回值等方面使用。还探讨了聚合类型的概念以及列表初始化的限制,如防止类型收窄的问题。此外,通过添加std::initializer_list构造函数,可以实现自定义类型的任意长度初始化。
摘要由CSDN通过智能技术生成

统一的初始化

       对于普通数组和POD类型(可以直接memcpy复制的对象)C++98/03可以使用初始化列表进行初始化,只有这两种数据类型可以使用初始化列表。

int arr[3]={1,2,3};
struct A
{
	int x;
	int y;
} a = {1,2};

       在C++11中,初始化列表可以用于任何类型对象的初始化
       在C++11中,可以直接在变量名后面跟上初始化列表,来进行对象的初始化。这是C++98/03锁不具备的。
       new操作符等可以用圆括号进行初始化的地方,也可以使用初始化列表:

int *a = new int {123};
double b = double{12.12};//对匿名对象使用初始化列表后,再进行拷贝初始化
int *arr = new int[3] {1,2,3};//堆上动态分配的数组也可以使用初始化列表进行初始化

       列表初始化还可以用于函数的返回值上:

struct Foo
{
	Foo(int, double){}
};
Foo func(void)
{
	return {123, 12.12};
}

       这里的return就如同返回了一个Foo(123,12.12)一样。

使用细节

       聚合类型的定义:
       (1)类型是一个普通数组(如int[10]、char[]、long[2][3])。
       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值