程序优化c++ 摘2
来源:互联网 发布:数控铣床卡通图案编程 编辑:程序博客网 时间:2024/06/06 02:20
一 1c++对象构造函数:
创建一个对象分成两个步骤,首先取得对象所需的内存,然后在该内存上执行构造函数。在构造函数构建该对象的时候,构造函数也分成两步:先执行初始化(通过初始化列表),再执行构造函数的函数体。。。。。这意味着,如果在构造函数函数体内为成员变量执行赋值操作,显然属于浪费,初始化成员变量通过构造函数的初始化列表赋予成员变量,而不是在构造函数体内进行这些初始化,因为进入构造函数体时,这些成员变量已经初始化一次了
class Aclass
{ public:
Aclass():i(10) , name("unnamed") //初试化列表
{
......
}
private:
int i;
string name;
}
2 对象创建/销毁 创建和销毁对象经常会成为一个程序性能瓶颈所在,因此有必要对临时对象的产生进行探究和规避。
减少对象创建和销毁的一个很简单且常见的方法就是在函数声明中将所有的值传递改为引用传递或常量引用传递。
int foo ( Object a ); // 值传递,会产生一个局部对象(复制原对象),调用结束后销毁复制得到的局部对象
int foo ( Object& a ); // 引用传递 , 传入原对象的地址,函数体内的改动都是针对原对象
int foo ( const Object& a );// 常量引用传递,传入 原对象的地址,并定义为常量,这样函数不能对原对象修改,只能读取。
Object foo2 ( Object a ) ;// 会产生两个临时对象,一个是值传递,一个是返回值
3 非内建类型的对象
a 尽量将对象延迟到已经确切知道其有效状态时创建,这样可以减少临时对象的生成。
aclass c = a+ b;要优于
aclass c;
c = a+b;
b operator += 不产生临时对象,性能会比operator + 要好。同样对于 -=和 -.....
c 保证程序语意正确的前提下,应该多用 ++i 少用 i++。同样对于 --i 和 i--。
4 临时对象的生命周期
string a,b;
const char* str;
.................
if( strlen( str = (a+b).c_str() ) >5 )
{ printf ("%s\n", str ); }
这个程序的运行结果是无法预料的,原因在于 存放 a+b的值的临时对象的生命在包含其最长语句结束后也相应的结束了。在执行到 printf时,该临时对象已经不存在了,字符串内容那个的str指向一段已经被收回的内存。这是的结果是无法预测的。
5 内联函数的正确使用
- C51笔记(2)--Keil C 程序优化
- C程序效率优化(2)
- c程序性能优化
- C程序优化
- C 程序优化技术
- C程序优化方法
- C 程序性能优化
- 优化C语言程序
- c语言程序优化
- c/c++程序优化
- 单片机C程序优化
- C程序优化
- 程序优化c++ 摘2
- C程序优化之路
- C程序优化之路
- C语言程序优化方法
- c程序性能优化读书笔记
- C语言程序如何优化
- 牛人主页(主页有很多论文代码)
- NVelocity介绍
- ubuntu上Android NDK调试配置
- 软件工程——数据流图
- .NET 数据类型之匿名类型(var)
- 程序优化c++ 摘2
- Why does JAXB put @XmlRootElement sometimes but not always
- 利用泛型和反射编写通用基础类型转换方法
- 使嵌入式Qt支持中文字体变换的方法(makeqpf)
- 代码调试中的 一个 小技巧
- C#性能之字符串拼接
- 10300 - Ecological Premium
- 存储器
- 2012五大主流浏览器 HTML5 和 CSS3 兼容性大比拼