c++11初始化

今天工作中突然用到map的初始化,顺便复习一下c++11中的变量初始化。
统一的初始化方法,c++11中所有数据类型都可以使用初始化列表,但是对于结构体 或者类,需要满足一定的条件:
(1)无用户自定义构造函数。

(2)无私有或者受保护的非静态数据成员

(3)无基类

(4)无虚函数

(5)无{}和=直接初始化的非静态数据成员。

class Foo
{
public:
	Foo(int) {}
private:
	Foo(const Foo &);
};
 
int  main()
{
	Foo a1(123); //调用Foo(int)构造函数初始化
	Foo a2 = 123; //error Foo的拷贝构造函数声明为私有的,该处的初始化方式是隐式调用Foo(int)构造函数生成一个临时的匿名对象,再调用拷贝构造函数完成初始化
 
	Foo a3 = { 123 }; //列表初始化
	Foo a4 { 123 }; //列表初始化
 
	int a5 = { 3 };
	int a6 { 3 };
	return 0;
}

stl初始化列表:
int arr[] = { 1, 2, 3, 4, 5 };
std::map < int, int > map_t { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
std::liststd::string list_str{ “hello”, “world”, “china” };
std::vector vec_d { 0.0,0.1,0.2,0.3,0.4,0.5};
此外,列表初始化防止类型收窄

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值