代码的优化 (五)(小疯子)
/*
声明的放置
(1) 请使用初始化而不是赋值
在C语言中只允许在一个函数体的开头进行变量的声明,然而在C++中声明可以出现
在程序的任何位置。这样做的目的是希望把对象的声明拖延到确实要使用它的时候
再进行。这样做可以有两个好处:1. 确保了对象在它被使用前不会被程序的其他部
分恶意修改。如果对象在开头就被声明然而却在20行以后才被使用的话,就不能做
这样的保证。2. 使我们有机会通过用初始化取代赋值来达到性能的提升,从前声
明只能放在开头,然而往往开始的时候我们还没有获得我们想要的值,因此初始化
所带来的好处就无法被应用。但是现在我们可以在我们获得了想要的值的时候直接
进行初始化,从而省去了一步。注意,或许对于基本类型来说,初始化和赋值之间
可能不会有什么差异,但是对于用户定义的类型来说,二者就会带来显著的不同,
因为赋值会多进行一次函数调用----operator =。因此当我们在赋值和初始化之间
进行选择的话,初始化应该是我们的首选。
(2) 把声明放在合适的位置上
在一些场合,通过移动声明到合适的位置所带来的性能提升应该引起我们足够的重视。
例如:
bool is_C_Needed();
void use()
{
C c1;
if (is_C_Needed() == false)
{
return; //c1 was not needed
}
//use c1 here
return;
}
上面这段代码中对象c1即使在有可能不使用它的情况下也会被创建,这样我们就会
为它付出不必要的花费,有可能你会说一个对象c1能浪费多少时间,但是如果是这
种情况呢:C c1[1000];我想就不是说浪费就浪费了。但是我们可以通过移动声明c1
的位置来改变这种情况:
void use()
{
if (is_C_Needed() == false)
{
return; //c1 was not needed
}
C c1; //moved from the block's beginning
//use c1 here
return;
}
怎么样,程序的性能是不是已经得到很大的改善了呢?因此请仔细分析你的代码,
把声明放在合适的位置上,它所带来的好处是你难以想象的。
(3) 初始化列表
我们都知道,初始化列表一般是用来初始化const或者reference数据成员。
但是由于他自身的性质,我们可以通过使用初始化列表来实现性能的提升。
我们先来看一段程序:
class Person
{
private:
C c_1;
C c_2;
public:
Person(const C& c1, const C& c2 ): c_1(c1), c_2(c2) {}
*/