Effective C++读书笔记(26)

条款26:尽可能延后变量定义式的出现时间

当你定义一个变量的时候就要保证这个变量能够在程序中使用到,不要定义无意义的变量,这样就要求我们最好是在变量使用

的时候才做定义,因为如果一个变量定义了却乜有使用可能会造成效率上的降低,毕竟很多变量的构建是要调用对应的构造函数

和析构函数的,考虑下面的例子:


std::string setName(std::string& name){
	string name_;
	if(name.length() == 0){
		throw logic_error("name length is zero error");
	}
	name_ = name;
	...
	return name_;
}

在上面的这个例子中,在函数内部定义了string变量name_,但是在抛出异常的时候这个变量却成了白板,根本就没有被用

到,因此我们可以将name_变量的定义放到name_被赋值的地方,也就是在抛出异常的后面!还有一点需要注意的地方是我们对

变量进行定义的时候尽量的用有效的值进行初始化,在上面的例子中我们可以通过参数name进行变量的初始化!

在一个循环中定义变量的时候,应该将变量定义在循环的外层还是内层这也需要注意下,下面例子:

Widget w;
for(int i = 0; i < 100 ; i++){
	w = 取决于i的某个值;
	...
}
for(int i = 0; i < 100 ; i++){
	Widget w = 取决于i的某个值;
	...
}

上面的例子中那个更加高效呢?第一种执行了一个构造函数+100个赋值函数,第二种执行了100个构造函数和100次析构函数

因此在采用哪种方法的问题上要考虑构造函数和析构函数对赋值函数效率的不同,此外后面的那种方式因为变量是定义在循环内部

的因此其命名空间的影响比较小,是一种不错的方式!


请注意:

  • 尽可能延后变量定义式的出现,这样做可增加程序的清晰度和效率。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值