C “靠近定义变量“之真正原因
来源:百度文库 编辑:神马文学网 时间:2024/04/28 16:58:20
[转自http://blog.csdn.net/hellothere/archive/2006/03/05/616037.aspx 程化的blog]
C++“靠近定义变量“之真正原因
在C++中,都知道要“尽量靠近变量实际使用处进行定义”。对此条规则一般的理解是:这是C++对C“函数开始处进行变量定义”的一种优化,目的是方便程序员定义和使用变量。最近学习时发现,这个规则实际上和C++“面向对象的编程语言”本质密切相关。
考虑如下的类定义和代码段:
class X
{
public:
X() : m_number(2);
~X();
void SetNumber(int number){m_number = number;};
int GetNumber(){return m_number};
private:
m_number;
};
int main(int argc, char* argv[])
{
X x1;
X x2;
if (x1.GetNumber() == 0)
{
return 0; // 第一个return
}
if (x2.GetNumber() == 2)
{
return 0; // 第二个return
}
return 0; // 最后的return
}
这段代码申明了两个X的局部变量,x1和x2。如果按照C的申明方式把两个变量放在函数的开始处,那么,编译器在每个return返回处都必须对x1和x2调用析构函数。
如果把代码改成如下形式:
int main(int argc, char* argv[])
{
X x1;
if (x1.GetNumber() == 0)
{
return 0; // 第一个return
}
X x2;
if (x2.GetNumber() == 2)
{
return 0; // 第二个return
}
return 0; // 最后的return
}
也就是在使用x2前才申明x2,则第一个return处编译器就不用加入对x2析构函数的调用了。
如果函数申明了比较多的对象,而且函数析构的开销比较大,则“使用前才申明”就能可观地减小代码尺寸和运行时开销。由此观之,本条规定的来源实际上是:“C++是面向对象的编程语言,编译器会插入很多编程者未书写的代码来达成面向对象语义,如果不遵循该规则,这些编译器添加的代码会造成较大的开销”。
C++中,很多似乎无关紧要的规则都有其深刻的含义,不是随便规定的。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=616037
C++“靠近定义变量“之真正原因
在C++中,都知道要“尽量靠近变量实际使用处进行定义”。对此条规则一般的理解是:这是C++对C“函数开始处进行变量定义”的一种优化,目的是方便程序员定义和使用变量。最近学习时发现,这个规则实际上和C++“面向对象的编程语言”本质密切相关。
考虑如下的类定义和代码段:
class X
{
public:
X() : m_number(2);
~X();
void SetNumber(int number){m_number = number;};
int GetNumber(){return m_number};
private:
m_number;
};
int main(int argc, char* argv[])
{
X x1;
X x2;
if (x1.GetNumber() == 0)
{
return 0; // 第一个return
}
if (x2.GetNumber() == 2)
{
return 0; // 第二个return
}
return 0; // 最后的return
}
这段代码申明了两个X的局部变量,x1和x2。如果按照C的申明方式把两个变量放在函数的开始处,那么,编译器在每个return返回处都必须对x1和x2调用析构函数。
如果把代码改成如下形式:
int main(int argc, char* argv[])
{
X x1;
if (x1.GetNumber() == 0)
{
return 0; // 第一个return
}
X x2;
if (x2.GetNumber() == 2)
{
return 0; // 第二个return
}
return 0; // 最后的return
}
也就是在使用x2前才申明x2,则第一个return处编译器就不用加入对x2析构函数的调用了。
如果函数申明了比较多的对象,而且函数析构的开销比较大,则“使用前才申明”就能可观地减小代码尺寸和运行时开销。由此观之,本条规定的来源实际上是:“C++是面向对象的编程语言,编译器会插入很多编程者未书写的代码来达成面向对象语义,如果不遵循该规则,这些编译器添加的代码会造成较大的开销”。
C++中,很多似乎无关紧要的规则都有其深刻的含义,不是随便规定的。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=616037
C “靠近定义变量“之真正原因
c语言中static 变量
成员变量的定义与使用
阅读尼采之十二:真正艺术品之定义
C语言变量的存储类别
真正女朋友的定义
男朋友的真正定义
MS-DOS脚本编程[2]-变量定义和引用
定义变量注意ActionScript3.0中的保留字和关键字
变量的声明与定义以及关键字extern的用法
C语言宏定义技巧
C语言宏定义技巧
鲜枣才是真正的维生素C之王(图)
pthread线程间通信之条件变量
C语言宏定义使用技巧
c宏定义的技巧总结
C语言宏定义实用总结
出家之定义
物联网之定义
【c语言】C语言 宏定义 使用技巧
Struts1+jsp的jsp中通过bean定义变量来循环比较值
早泄的定义、原因及其治疗方法
林彪不入朝的真正原因
热气的真正原因