一、现象
- 情况1:过早定义变量会导致变量存在未被完全使用的情况,增加构造析构的成本。
std::string encryptPassword( const std::string& password ){
using namespace std;
string encrypted;
if(password.length() < MinimumPasswordLength){
throw logic_error("Password is too short");
}
...
return encrypted;
}
- 情况2:定义变量时就初始化,跳过毫无意义的default构造过程。
std::string encryptPassword( const std::string& password ){
...
//std::string encrypted; //毫无意义的default构造
//encryped = password;
std::string encrypt(password); //通过copy构造函数定义并初始化
encrypt(encrypted);
return encrypted;
}
- 情况3:变量定义在循环外部还是内部
定义在外部的成本:1个构造函数 + 1个析构函数 + n个赋值操作 定义在内部的成本:n个构造函数 + n个析构函数
除非(1)当赋值成本比“构造+析构”成本低,(2)你正在处理代码中效率高度敏感的部分,否则你应该定义在内部;
|