《Effective C++》学习笔记条款26 尽可能延后变量定义式的出现时间
2013-12-29 19:17
447 查看
条款26:尽可能延后变量定义式的出现时间
只要你定义了一个变量而其类型带有一个构造函数或析构函数,那么当程序的控制流到达这个变量定义式时,你便
得承受构造成本;当这个变量离开其作用域时,你便得承受析构成本。即使这个变量最终并为被使用,仍需耗费这些
成本,所以应该尽量避免这种情形。
std::string encryptPassword(const std::string& password)
{
using namespace std;
string encrypted1;
if (password.length() <MinimumPasswordLength)
{
throwlogic_error("Password is too short"); //注意:可能抛出异常
}
string encrypted2;
...
return encrypted;
}
如上代码,encrypted在2处定义是个不错的选择,因为如果抛出异常,那么encrypted的构造和析构可是做了无用
功啊!
还有一点要注意:“通过默认构造函数构造出一个对象然后对它赋值”比“直接在构造函数时制定初值”效率差。
“尽可能延后”的真正意义应该是:你不只应该延后变量的定义,直到非得使用该变量的前一刻为止,甚至应该尝
试延后这份定义直到能够给它初值实参为止。
//方法A:定义循环外
Widget w;
for (int i = 0; i < n; ++i)
{
w = somevalue dependent on i;
...
} //1个构造函数+1个析构函数+n个赋值操作;
//方法B:定义循环外
for (int i = 0; i< n; ++i)
{
Widget w(some value dependent on i);
...
} //n个构造函数+n个析构函数
除非:1.你知道赋值成本比“构造+析构”成本低;2.你正在处理代码中效率高度敏感的部分,否则应该使用方法B。
请记住:
尽可能延后变量定义式的出现。这样做可增加程序的清晰度并改善程序效率。
只要你定义了一个变量而其类型带有一个构造函数或析构函数,那么当程序的控制流到达这个变量定义式时,你便
得承受构造成本;当这个变量离开其作用域时,你便得承受析构成本。即使这个变量最终并为被使用,仍需耗费这些
成本,所以应该尽量避免这种情形。
std::string encryptPassword(const std::string& password)
{
using namespace std;
string encrypted1;
if (password.length() <MinimumPasswordLength)
{
throwlogic_error("Password is too short"); //注意:可能抛出异常
}
string encrypted2;
...
return encrypted;
}
如上代码,encrypted在2处定义是个不错的选择,因为如果抛出异常,那么encrypted的构造和析构可是做了无用
功啊!
还有一点要注意:“通过默认构造函数构造出一个对象然后对它赋值”比“直接在构造函数时制定初值”效率差。
“尽可能延后”的真正意义应该是:你不只应该延后变量的定义,直到非得使用该变量的前一刻为止,甚至应该尝
试延后这份定义直到能够给它初值实参为止。
//方法A:定义循环外
Widget w;
for (int i = 0; i < n; ++i)
{
w = somevalue dependent on i;
...
} //1个构造函数+1个析构函数+n个赋值操作;
//方法B:定义循环外
for (int i = 0; i< n; ++i)
{
Widget w(some value dependent on i);
...
} //n个构造函数+n个析构函数
除非:1.你知道赋值成本比“构造+析构”成本低;2.你正在处理代码中效率高度敏感的部分,否则应该使用方法B。
请记住:
尽可能延后变量定义式的出现。这样做可增加程序的清晰度并改善程序效率。
相关文章推荐
- Effective C++:条款26:尽可能延后变量定义式的出现时间
- Effective C++ 条款26:尽可能延后变量定义式的出现时间
- 《Effective C++》之条款26:尽可能延后变量定义式的出现时间
- Effective C++:条款26:尽可能延后变量定义式的出现时间
- effective C++ 条款 26:尽可能延后变量定义式的出现时间
- Effective C++ -----条款26:尽可能延后变量定义式的出现时间
- Effective C++ 条款26 尽可能延后变量定义式的出现时间
- 条款26:尽可能延后变量定义式的出现时间
- 《Effective C++》读书笔记之item26:尽可能延后变量定义式的出现时间
- 条款26:尽可能延后变量定义式出现的时间
- 条款26:尽可能延后变量定义式的出现时间(Postpone variable definitions as long as possible)
- 【Effection C++】读书笔记 条款26:尽可能延后变量定义式的出现时间
- 条款26:尽可能延后变量定义式的出现时间
- 条款26 尽可能延后变量定义式的出现时间
- 条款26:尽可能延后变量定义式的出现时间
- 条款26:尽可能延后变量定义式的出现时间
- 条款26:尽可能延后变量定义式的出现时间
- Effective C++条款26解读: 尽可能延后变量定义式的出现时间
- 《Effect C++》学习------条款26:尽可能延后变量定义式的出现时间
- [Effective C++ --026]尽可能延后变量定义式的出现时间