Noob提问,但想了解以下内容:
想象一下,我有一个多文件项目。我在头文件中指定类,以便在项目中的所有文件之间共享,我写这个:static int test = 0;
并在下一行这个:static const int MAX = 4;
由于一个定义规则,第一个尝试编译会出错。但第二个将编译没有错误。为什么呢?
据我所知,两者都具有相同的属性:整个执行存储持续时间,类范围和无链接。
任何帮助?
编辑:在标题中测试外部常量声明:extern const int MAX = 4;
强制外部链接产生预期错误。所以我不明白为什么变量它给了我错误,而常量却没有。
答案 0 :(得分:2)
尝试
static const int test = 0;
我有时会注意到头文件中立即初始化静态const变量的编译器错误。您始终可以在标题
中使用声明class MyClass
{
// ...
static const int test;
// ...
}
并在相应的.cpp文件中初始化它
const int MyClass::test = 0;
这也适用于除int
以外的任何其他类型。
答案 1 :(得分:1)
C ++中的整数常量实际上并不占用对象中的任何空间,并且通常不像变量那样起作用。想想它们更像是在这个特定背景下给出名字的数字。