主题:C语言和C++定义常数的方式
这篇文章不仅关心的问题比较有意思,而且可以看出作者下了一些功夫,包括试验和书写方面,特此转录,不过有删节,只保留跟定义常量有关的东西。
C语言定义常数常用的方式是宏定义#define。宏有两个作用,一是定义常量,二是定义很短的函数或代码段。
而C++定义常量的方式是用关键字 const,如:
const int a = 1;
但较少为人知道的是,其实C语言也支持const关键字,也就是说,上述语句在C语言中也是合法的。
但是,C的const和C++的const是有所不同的,这里可以做一组实验来验证:
#include
void main()
{
}
分别使用VC6和TC2编译这段代码,得到的结果是不同的。TC2(C语言)得到的结果为2,这很好理解,虽然a被声明为const,但我们还是可以通过指针来改变它的值;VC6(C++语言)得到的结果为1,这是因为在C++中const有两层含义,一是用来声明值不可改变的量,这等同于C语言中的意义,二是用来声明可以在编译期确定其值的量,这类似于C语言的#define。如果一个量的值确实可以在编译期算出来,那么编译器将尽可能对其进行优化,在之后用到此量的地方都直接用其值来代替,从而减少对内存的访问,以达到和#define相同的效率。
正是因为多了这一层含义,C++的教材上才说定义常数时,可以使用const取代#define,不仅在功能上,更是在性能上。假如C++的const仍然只具有和C语言的const一样的能力,那么它在性能上仍不能取代#define。
结论:
1. C语言支持const;
2. C语言的const只保证量值不被显式修改,不进行性能上的优化。时装搭配 http://www.iyidang.net/