26. Postpone variable definitions as long as possible
尽可能延后变量定义式的出现时间
有加密函数如下:
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相关推荐
- 《Effective C++》学习笔记——条款26
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- Effective C++ 改善55个方法
美·Scott Meyers 候捷 电子工业 2011 刚才看到个会议时间有点晚,3.25论文都提交了 谷歌去广告的插件, 最后投了这个会议,刚刚好正合适.我说金钱与时间 ACCUSTOMING YO ...
- Effective C++ 读书笔记之Part5.Implementations
26. Postpone variable definitions as long as possible. 总结: 尽可能延后变量定义式的出现.这样做可增加程序的清晰度并改善程序效率. 批注: 纯C ...
- Effective C++读书笔记 摘自 pandawuwyj的专栏
Effective C++读书笔记(0) Start 声明式(Declaration):告诉编译器某个东西的名称和类型,但略去细节. std::size_t numDigits(i ...
- Effective C++改善程序与设计的55个具体做法笔记
Scott Meyers大师Effective三部曲:Effective C++.More Effective C++.Effective STL,这三本书出版已很多年,后来又出版了Effective ...
- 《Effective C++》》阅读笔记
第一章 Accustoming Yourself to C++ 1 View C++ as a federation of language (1). ...
- C++ Primer(第4版)(评注版)
<C++ Primer(第4版)(评注版)> 基本信息 原书名: C++ Primer (4th Edition) 原出版社: Addison-Wesley Professional; 4 ...
- Linux--内核Uevent事件机制 与 Input子系统【转】
阅读目录 Uevent在kernel中的位置 Uevent的内部逻辑解析 转自:http://blog.csdn.net/lxl584685501/article/details/46379453 [ ...
- ZYNQ基本使用(2) GPIO的使用
目录 GPIO使用 Zynq GPIO简介 硬件系统 添加MIO和EMIO 添加AXI GPIO 管脚约束 软件系统 MIO和EMIO AXI_GPIO 备注 参考 GPIO使用 Zynq GPIO简 ...
- SEM代码篇----R详细实现(SEM 2)
SEM代码篇----R详细实现 1. step1:安装包 # install.packages("lavaan") #install.packages("semPlot& ...
最新文章
- Python实现阿里云aliyun服务器里的文件上传与下载
- 转:安装PHP出现make: *** [sapi/cli/php] Error 1 解决办法
- c语言 python-C语言、Java语言和python语言的区别在哪里
- Kafka 不停机修改某一个topic数据保存时间
- OpenStack不行了吗?悉尼峰会,OpenStack的白城反击战?
- python支付宝蚂蚁森林_Python教你迅速成为“蚂蚁森林排行榜”第一名
- FFT算法程序设计c语言,实数FFT算法的设计及其C语言实现
- 直播电商源码,实现直播音视频的推流
- wget无法批量下载气象数据的解决方案(Python、迅雷批量下载气象数据方法)
- 关于Excel表格快捷键
- C++行为型模式-中介者模式
- hdu 3932 Groundhog Build Home
- 市场调研—全球及中国活化部分凝血活酶时间测试(APTT测试)行业研究及十四五规划分析报告
- python源代码制作星空_用python画星空源代码是什么?
- php imap函数,Imap是什么意思,php imap 函数详解(2)
- hadoop+Kylin服务器搭建教程
- execjs调用第三方js库
- python 3d库 机房监控_三维可视化机房智能监控系统
- 天生棋局与棋局判断(C语言)
- 两篇文章都是翻译了一半就翻不下去了,E文水平有待提高啊
热门文章
- ORACLE11.2.0.1升级到11.2.0.3
- 《BI那点儿事》数据流转换——聚合
- .NET软件授权管理解决方案Eziriz .NET IntelliLock
- 5.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- Kong 的配置详解
- 31.Linux/Unix 系统编程手册(上) -- 线程:线程安全和每线程存储
- 3.jenkins 基础
- 43.访问控制过滤器(Access Control Filter)
- 43. Element hasAttributes() 方法
- 智慧屏鸿蒙系统简介,首发鸿蒙系统,荣耀智慧屏是何方神圣?
- SVN报错 could not connect to server