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

有加密函数如下:

std::string encryptPassword(const std::string& password)
{...std::string encrypted;if (password.size() < MinnumPasswordLenght){throw logic_error("Password is too short");} ...return encrypted;
}

如果密码的长度不满足抛出异常,encrypted被构造出来未被使用就要被析构,却要付出调用构造函数和析构函数的开销。

应该修改为:

std::string encryptPassword(const std::string& password)
{...if (password.size() < MinnumPasswordLenght){throw logic_error("Password is too short");}   std::string encrypted;encrypted = password;...return encrypted;
}

这段代码依然不够完美,默认构造出一个对象,接下来再对它他赋值。还不如直接使用参数对之进行构造或者是拷贝构造。

最终版本如下:

std::string encryptPassword(const std::string& password)
{...if (password.size() < MinnumPasswordLenght){throw logic_error("Password is too short");}   std::string encrypted(password);...return encrypted;
}

"尽可能延后"的真正意义,不止应该延后变量的定义,直到非得使用该变量的前一刻为止,而应该尝试延后这份定义直到能够给它初值实参为止。这样不仅能够避免构造和析构非必要对象,还可以避免无意义的default构造行为。"具明显意义之初值"将变量初始化,还可以附带说明变量的目的。

请记住:

  • 尽可能延后变量定义式的出现。这样做可增加程序的清晰度并改善程序效率。

26. Postpone variable definitions as long as possible相关推荐

  1. 《Effective C++》学习笔记——条款26

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  2. Effective C++ 改善55个方法

    美·Scott Meyers 候捷 电子工业 2011 刚才看到个会议时间有点晚,3.25论文都提交了 谷歌去广告的插件, 最后投了这个会议,刚刚好正合适.我说金钱与时间 ACCUSTOMING YO ...

  3. Effective C++ 读书笔记之Part5.Implementations

    26. Postpone variable definitions as long as possible. 总结: 尽可能延后变量定义式的出现.这样做可增加程序的清晰度并改善程序效率. 批注: 纯C ...

  4. Effective C++读书笔记 摘自 pandawuwyj的专栏

    Effective C++读书笔记(0)       Start   声明式(Declaration):告诉编译器某个东西的名称和类型,但略去细节.   std::size_t numDigits(i ...

  5. Effective C++改善程序与设计的55个具体做法笔记

    Scott Meyers大师Effective三部曲:Effective C++.More Effective C++.Effective STL,这三本书出版已很多年,后来又出版了Effective ...

  6. 《Effective C++》》阅读笔记

    第一章    Accustoming Yourself to C++ 1           View C++ as a federation of language (1).             ...

  7. C++ Primer(第4版)(评注版)

    <C++ Primer(第4版)(评注版)> 基本信息 原书名: C++ Primer (4th Edition) 原出版社: Addison-Wesley Professional; 4 ...

  8. Linux--内核Uevent事件机制 与 Input子系统【转】

    阅读目录 Uevent在kernel中的位置 Uevent的内部逻辑解析 转自:http://blog.csdn.net/lxl584685501/article/details/46379453 [ ...

  9. ZYNQ基本使用(2) GPIO的使用

    目录 GPIO使用 Zynq GPIO简介 硬件系统 添加MIO和EMIO 添加AXI GPIO 管脚约束 软件系统 MIO和EMIO AXI_GPIO 备注 参考 GPIO使用 Zynq GPIO简 ...

  10. SEM代码篇----R详细实现(SEM 2)

    SEM代码篇----R详细实现 1. step1:安装包 # install.packages("lavaan") #install.packages("semPlot& ...

最新文章

  1. Python实现阿里云aliyun服务器里的文件上传与下载
  2. 转:安装PHP出现make: *** [sapi/cli/php] Error 1 解决办法
  3. c语言 python-C语言、Java语言和python语言的区别在哪里
  4. Kafka 不停机修改某一个topic数据保存时间
  5. OpenStack不行了吗?悉尼峰会,OpenStack的白城反击战?
  6. python支付宝蚂蚁森林_Python教你迅速成为“蚂蚁森林排行榜”第一名
  7. FFT算法程序设计c语言,实数FFT算法的设计及其C语言实现
  8. 直播电商源码,实现直播音视频的推流
  9. wget无法批量下载气象数据的解决方案(Python、迅雷批量下载气象数据方法)
  10. 关于Excel表格快捷键
  11. C++行为型模式-中介者模式
  12. hdu 3932 Groundhog Build Home
  13. 市场调研—全球及中国活化部分凝血活酶时间测试(APTT测试)行业研究及十四五规划分析报告
  14. python源代码制作星空_用python画星空源代码是什么?
  15. php imap函数,Imap是什么意思,php imap 函数详解(2)
  16. hadoop+Kylin服务器搭建教程
  17. execjs调用第三方js库
  18. python 3d库 机房监控_三维可视化机房智能监控系统
  19. 天生棋局与棋局判断(C语言)
  20. 两篇文章都是翻译了一半就翻不下去了,E文水平有待提高啊

热门文章

  1. ORACLE11.2.0.1升级到11.2.0.3
  2. 《BI那点儿事》数据流转换——聚合
  3. .NET软件授权管理解决方案Eziriz .NET IntelliLock
  4. 5.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- Kong 的配置详解
  5. 31.Linux/Unix 系统编程手册(上) -- 线程:线程安全和每线程存储
  6. 3.jenkins 基础
  7. 43.访问控制过滤器(Access Control Filter)
  8. 43. Element hasAttributes() 方法
  9. 智慧屏鸿蒙系统简介,首发鸿蒙系统,荣耀智慧屏是何方神圣?
  10. SVN报错 could not connect to server