条款26:尽可能延后变量定义式出现的时间
2014-06-03 19:03
246 查看
条款26:尽可能延后变量定义式出现的时间
直接看书中的例子
修改为如下:
尽量延后变量的定义,直到非得使用该变量的前一刻为止,甚至应该尝试延后这份定义直到能够给它初值实参为止.这样的话就不仅能够避免构造(和析构)非必要对象,还可以避免无意义的default构造行为.
出现循环了怎么办?如下
做法B:n个构造 + n个析构
如果类的赋值成本比“构造+析构”成本低,并且正在处理效率高度敏感的部分,那么A做法效率较高。否则B或许更好的选择,B的作用域比A小,可增加程序的可理解性和易维护性。
记住
尽可能延后变量定义式的出现。这样做可增加程序的清晰度并改善程序效率。
直接看书中的例子
const unsigned long MAX_LEN = 128; std::string encryptPasswd(std::string &passwd) { string encrypted; if (passwd.length() < MAX_LEN) { throw logic_error("Passwd is too short\n"); } encrypted = strupr(const_cast<char *>(passwd.c_str())); //加密方法是将密码转换为大写 return encrypted; }调用时,如果密码长度不够抛出异常,则encrypted需要额外增加构造和析构成本。
修改为如下:
string encrypted = strupr(const_cast<char *>(passwd.c_str())); //加密方法是将密码转换为大写在encrypted需要时才进行定义并调用copy构造函数初始化。
尽量延后变量的定义,直到非得使用该变量的前一刻为止,甚至应该尝试延后这份定义直到能够给它初值实参为止.这样的话就不仅能够避免构造(和析构)非必要对象,还可以避免无意义的default构造行为.
出现循环了怎么办?如下
//方法A:定义于循环外 Widget w; for(int i = 0; i < n; i++) { w = 取决于某个i的值; … } //方法B:定义于循环内 for(int i = 0; i < n; i++) { Widget w(取决于i的某个值); … }做法A:1个构造 + 1个析构 + n个赋值
做法B:n个构造 + n个析构
如果类的赋值成本比“构造+析构”成本低,并且正在处理效率高度敏感的部分,那么A做法效率较高。否则B或许更好的选择,B的作用域比A小,可增加程序的可理解性和易维护性。
记住
尽可能延后变量定义式的出现。这样做可增加程序的清晰度并改善程序效率。
相关文章推荐
- 条款26:尽可能延后变量定义式的出现时间
- 条款26:尽可能延后变量定义式的出现时间
- 《Effective C++》之条款26:尽可能延后变量定义式的出现时间
- 条款26 尽可能延后变量定义式的出现时间
- Effective C++ -----条款26:尽可能延后变量定义式的出现时间
- Effective C++:条款26:尽可能延后变量定义式的出现时间
- 条款26:尽可能延后变量定义式的出现时间
- Effective C++ 条款26 尽可能延后变量定义式的出现时间
- effective C++ 条款 26:尽可能延后变量定义式的出现时间
- Effective C++ 条款26:尽可能延后变量定义式的出现时间
- 条款26:尽可能延后变量定义式的出现时间
- 《Effective C++》学习笔记条款26 尽可能延后变量定义式的出现时间
- 条款26:尽可能延后变量定义式的出现时间
- 条款26:尽可能延后变量定义式的出现时间(Postpone variable definitions as long as possible)
- Effective C++条款26解读: 尽可能延后变量定义式的出现时间
- 《Effect C++》学习------条款26:尽可能延后变量定义式的出现时间
- Effective C++:条款26:尽可能延后变量定义式的出现时间
- 【Effection C++】读书笔记 条款26:尽可能延后变量定义式的出现时间
- 条款26 尽可能延后变量定义出现的时间
- 【26】尽可能延后变量定义式的出现时间