Modern Effective C++ Item7 阅读笔记

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
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值