回 帖 发 新 帖 刷新版面

主题:C语言和C++定义常数的方式

这篇文章不仅关心的问题比较有意思,而且可以看出作者下了一些功夫,包括试验和书写方面,特此转录,不过有删节,只保留跟定义常量有关的东西。


C语言定义常数常用的方式是宏定义#define。宏有两个作用,一是定义常量,二是定义很短的函数或代码段。

而C++定义常量的方式是用关键字 const,如:
const int a = 1;

但较少为人知道的是,其实C语言也支持const关键字,也就是说,上述语句在C语言中也是合法的。

但是,C的const和C++的const是有所不同的,这里可以做一组实验来验证:

#include
void main()
{
       const int a = 1;
       int *pa = (int*)&a;
       *pa = 2;
       printf("%d", a);
}
分别使用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/

回复列表 (共1个回复)

沙发

贴小广告只是自己没屁眼,而贴错误的知识(估计你的智力也无法分辨真伪)会生儿子没屁眼

我来回复

您尚未登录,请登录后再回复。点此登录或注册