Item 7:在定义变量时,需要区分()和 { } 的作用。
要点一:{}是最广泛应用的初始化语法,可以避免收缩转换,避免绝大部分的变量错误定义。
以下是两个例子体现{}的作用。
(1).定义不可拷贝的变量时,可以采用{},()来赋值;当采用“=”赋值时会出错
std::atomic<int> a = 1;//error
std::atomic<int> a(1);//fine
std::atomic<int> a{1};//fine
(2).使用{}定义变量时,编译器认为该变量需要收缩转换时会提示,避免错误。
double x=0,y=0;
int z{ x + y };//从“double”转换到“int”需要收缩转换,报错
int z(x + y);//没报错
int z = x + y;//没报错
要点2:判断什么时候使用(),{}的一个典型例子是vector的初始化
std::vector<int>a{ 10,10 };//该容器有两个变量,值都是10
std::vector<int>a(10, 10);//该容器有10个变量,每个变量的值为10
要点3:定义一个与模板相关的变量,需要注意选择使用()或者{}初始化会产生不一样的结果。
void work(Ts&&...params)
{
T object(std::forward<Ts>(params)... );//1.使用()初始化
//T object{ std::forward<Ts>(params)... }; 2.//使用{}初始化
for (auto iter : object)
{
std::cout << iter<<std::endl;
}
}
int main()
{
work<std::vector<int>>(10,20);//1.将生成10个20 2.将生成10和20
}