代码优化—From <effective C++>
1.尽可能的延后变量定义式的出现时间
不止应该延后变量的定义,直到非得使用该变量的前一刻为止,甚至应该尝试延后这份定义直到能够给它初值实参为止。
如果这样不仅能够避免构造和析构非必要对象,还可以避免无意义的default构造行为。
2.尽量少做转型动作
尽量避免使用转型,特别是在注重效率的代码中避免Dynamic_casts。
如果转型是必要的,试着将它隐藏于某个函数背后。
尽可能使用新型转型(C++style)。
3.避免返回handle指向对象内部成分
避免返回handle(包括references、指针、迭代器)指向对象内部。
绝对不该令成员函数返回一个指针指向“访问级别较低”的成员函数。如果这么做了,后者的实际访问级别就会提高如同前者。
4.异常安全函数
带有异常安全性的函数会:不泄露任何资源、不允许数据败坏。
不泄露任何资源:以对象管理资源
不允许数据败坏:三种安全异常函数:基本承诺、强烈保证、不抛掷保证。
强烈保证往往能够以copy-and-swap 实现出来,但是强烈保证并非对所有函数都可实现或具备现实意义。
5.使用inlining
将大多数inlining限制在小型、被频繁调用的函数身上,这可使日后的调试过程和二进制升级更容易,也是潜在的代码膨胀问题最小化,使程序的速度提升机会最大化。
不要只因为function template出现在头文件中,就将他们声明为inline.
6.将接口从实现中分离
如果使用object references 或 object pointer 可以完成任务,就不要使用object;
如果能够,尽量以class声明式替代class定义式;
为声明式和定义式提供不同的头文件。
代码优化—From <effective C++>的更多相关文章
- [Effective Java]第八章 通用程序设计
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- PHP代码优化
1 代码优化 1 尽量静态化 如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍. 当然了,这个测试方法需要在十万级以上次执行,效果才明显. 其实静态方法和 ...
- Effective前端2:优化html标签
div { float: left; } .keyboard > div + div { margin-left: 8px; } --> div{display:table-cell;ve ...
- Effective java笔记(二),所有对象的通用方法
Object类的所有非final方法(equals.hashCode.toString.clone.finalize)都要遵守通用约定(general contract),否则其它依赖于这些约定的类( ...
- 跟Unity3D学代码优化
今天我们来聊聊如何跟Unity学代码优化,准确地说,是通过学习Unity的IL2CPP技术的优化策略,应用到我们的日常逻辑开发中. 做过Unity开发的同学想必对IL2CPP都很清楚,简单地说,IL2 ...
- 《Effective java》-----读书笔记
2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己!预计在2016年要看12本书,主要涉及java基础.Spring研究.java并 ...
- 《Effective Java》学习笔记——积累和激励
从一个实际案例说起 国庆长假前一个礼拜,老大给我分配了这么一个bug,就是打印出来的报表数量为整数的,有的带小数位,有的不带,毫无规律. 根据短短的两个多月的工作经验以及猜测,最终把范围缩小到以下这段 ...
- Effective前端5:减少前端代码耦合
什么是代码耦合?代码耦合的表现是改了一点毛发而牵动了全身,或者是想要改点东西,需要在一堆代码里面找半天.由于前端需要组织js/css/html,耦合的问题可能会更加明显,下面按照耦合的情况分别说明: ...
- Effective前端4:尽可能地使用伪元素
伪元素是一个好东西,但是很多人都没怎么用,因为他们觉得伪元素太诡异了.其实使用伪元素有很多好处,最大的好处是它可以简化页面的html标签,同时用起来也很方便,善于使用伪元素可以让你的页面更加地简洁优雅 ...
随机推荐
- Codeforces Round #326 (Div. 2) C. Duff and Weight Lifting 水题
C. Duff and Weight Lifting Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest ...
- 经常使用的android弹出对话框
我们在平时做开发的时候,免不了会用到各种各样的对话框,相信有过其它平台开发经验的朋友都会知道,大部分的平台都仅仅提供了几个最简单的实现,假设我们想实现自己特定需求的对话框,大家可能首先会想到,通过继承 ...
- STL中heap算法(堆算法)
①push_heap算法 以下是push_heap算法的实现细节.该函数接收两个迭代器,用来表现一个heap底部容器(vector)的头尾,而且新元素已经插入究竟部的最尾端. template ...
- 实现Android半透明Menu效果的开发实例
不知道大家是否用过天天动听,对于它界面上的半透明Menu效果,笔者感觉非常漂亮.下面是天天动听半透明Menu的截图,欣赏下吧: 感觉还不错吧?那么如何实现这种半透明Menu效果呢?本文就重点讨论并给出 ...
- Struts2之异常处理
一.学习案例:通过在input.jsp页面输入登录账号和password測试异常处理机制. 二.案例分析:struts2提供了局部异常处理机制和全局异常处理机制.局部优先于全局异常处理,当异常找不到局 ...
- mysql 面试
数据库的重要性是所有技术里最核心最需要掌握的(理解原理,并且被面试时能清晰的表达出来),直接决定运维人员薪水的高低! 所有题都要给出专业的解答方案,不是很水的那种泛泛的解答. 面试题001:什么是My ...
- Python Generators(生成器)--yield
参考:http://blog.csdn.net/scelong/article/details/6969276 Python生成器 什么是python生成器,意思是带有一个yield语句的函数,既然它 ...
- Oracle11g for RedHat6.4安装手册
一. 检查 Oracle 11g 安装所依赖的软件包 检查包是否安装 # rpm -q 包名 包名: 1 ) binutils 2 ) compat-libstdc++ 3) elfutils ...
- 用const取代宏定义更好的管理内存
用const取代宏定义更好的管理内存 宏:只是在预处理器里进行文本替换,没有类型,不做任何类型检查,编译器可以对相同的字符串进行优化.只保存一份到 .rodata 段.甚至有相同后缀的字符串也可以优化 ...
- python(1) - 数据类型和变量
数据类型: 整数:就是整数,包括正整数,0,负整数 浮点数: 通俗点说,就是小数 长整数: 就是比较长的整型,通常后面会跟一个L 字符串: 字符串需要用""或''括起来.单引号和双 ...