美文网首页
尽可能延后变量定义出现的时间

尽可能延后变量定义出现的时间

作者: Magic11 | 来源:发表于2018-02-16 11:59 被阅读0次

变量的定义不仅要尽量延后到使用它的时候,而且要延后到能给该变量初始化赋值的时候。

原因如下:
1、只要你定义了一个变量,而且其类型带有一个构造函数或析构函数,那么当程序执行到这个变量的定义处 时,就需要承受该变量的构造成本,当程序执行离开该变量的作用域时,又要承受该变量的析构成本。
2、 无法保证你定义一个变量,就一定会使用该变量,考虑如下函数。

string encryptPassword(const std::string& password) {  
    using namespace std;  
    string encrypted;  
    if(password.length() < MinimumPasswordLengt) {  
        throw logic_error(“Password is too short”)  
    }  
    …//必要动作,将一个加密后的密码置入encrypted内。  
    return encypted;  
}  

如果if分支抛出异常,此时变量encrypted就不会被使用,并且需要承受string 的构造和析构成本。
所以应尽量在变量要使用的地方再去定义它,上述函数修改如下:

//这个函数延后“encrypted”的定义,直到真正需要它  
string encryptPassword(const std::string& password) {  
    using namespace std;  
    if(password.length() < MinimumPasswordLengt) {  
        throw logic_error(“Password is too short”)  
    }  
    string encrypted;  
    …//必要动作,将一个加密后的密码置入encrypted内。  
    return encypted;  
}  

3、上述string encrypted; 仍会调用string的缺省构造函数,所以下述代码:

//这个函数延后“encrypted”的定义,直到真正需要它  
//但此函数仍然有着不该有的效率低落
string encryptPassword(const std::string& password) {  
    using namespace std;  
    if(password.length() < MinimumPasswordLengt) {  
        throw logic_error(“Password is too short”)  
    }  
    string encrypted;  
    encrypted = password;
    encrypt(encrypted);
    return encypted;  
}  

最好的做法是以password作为encrypted的初值,跳过毫无意义的缺省构造过程。
这里主要是遵循条款4:

“通过default的构造函数构造出一个对象然后对它赋值”比“直接在构造时指定初值”

相关文章

  • Effective C++ 学习备忘录五

    实现 条款 26 - 尽可能延后变量定义式的出现时间 尽可能延后变量定义式的出现。这样做可增加程序的清晰度并改善程...

  • 尽可能延后变量定义出现的时间

    变量的定义不仅要尽量延后到使用它的时候,而且要延后到能给该变量初始化赋值的时候。 原因如下:1、只要你定义了一个变...

  • 【Effective C++(5)】实现

    26 尽可能延后变量定义式的出现时间 只要你定义了一个类型带有构造函数和析构函数的变量,当控制流到达这个变量定义式...

  • Effective C++_读书笔记_105

    实现 谨记 80 - 20 原则谨记条款 13: 以对象管理资源 条款26 尽可能延后变量定义式的出现时间 尽可能...

  • Effective C++学习笔记(第五章)

    条款26:尽可能延后变量定义式的出现时间 考察下面的示例代码: 很显然,这里的myStr提前定义了,并且会带来额外...

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

    《Effective C++ 中文版 第三版》读书笔记 ** 条款 26:尽可能延后变量定义式的出现实现时间 **...

  • 实现、继承与面向对象设计

    条款26 尽量延后变量的定义式出现的时间 不仅应该延后变量的定义,更应该直到使用该变量的前一刻为止,甚至应该尝试延...

  • Effective C++ Chapter5-实现

    26、尽可能延后变量定义式的出现时间 条款4曾经解释为什么“通过defailt构造函数构造出一个对象然后对它赋值”...

  • Effective C++ Term 26 延后定义变量

    好处: 避免不必要的开销(构造、析构) 增加代码的可读性 对于循环中,是将变量定义在循环外好,还是循环内好?这个问...

  • shell 编程

    变量 赋值 变量定义的过程中不能出现空格 只读变量 使用readonly 命令能将变量定义为只读变量,只读变量的值...

网友评论

      本文标题:尽可能延后变量定义出现的时间

      本文链接:https://www.haomeiwen.com/subject/cvcptftx.html