符号常量const和deline有什么不同

请通俗一点,最好有列子打错了,是define
2025-04-09 00:56:06
推荐回答(1个)
回答1:

#define是源代码字符串替换,替换的可以不止是常量。作为符号常量时,一般只能替换为字面量。除了C语言中用双引号括起来引用的字符串字面量(常量性由语言实现定义,不作语法检查)以外,C/C++其它的字面量都是常量。
const修饰的对象,可以是编译期常量(包括上述字面量;运行期仅占用数据段/代码段而不占用堆栈段存储器空间),也可以是只读变量(运行期常量,在运行期和变量一样,要占用堆栈段空间)。相对而言,前者是“真正”的常量,后者只是不能修改(由编译器保证)的变量被看成常量。
const int i = 1;
#define i (1)
这两者在C++中效果相同(C中const int也不能用来定义数组限定元素数或作标号,因为在这些上下文中const对象不会被当作编译期常量)。

extern const int i; /*在另外的编译单元定义const int i = 1;*/
#define i (1)
这样效果不同,前者是运行期常量(编译器逐单元编译,无法确定常量的值,只能作为运行期常量处理),后者是编译期常量。
LS错误(把所有const都当成以上的运行期常量)。
此外,最终目标文件(例如.exe)的生成过程中,可以进行一些优化,把一些运行期常量替换为编译期常量,以提升效率。
====
[原创回答团]