c++11初始化

时间:2025-03-12 21:47:12

今天工作中突然用到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};
此外,列表初始化防止类型收窄