条款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次析构函数
因此在采用哪种方法的问题上要考虑构造函数和析构函数对赋值函数效率的不同,此外后面的那种方式因为变量是定义在循环内部
的因此其命名空间的影响比较小,是一种不错的方式!
请注意:
- 尽可能延后变量定义式的出现,这样做可增加程序的清晰度和效率。