0

菜鸟问题,但想了解以下内容:

想象一下我有一个多文件项目。我在头文件中指定了一个,以便在项目中的所有文件之间共享,我写了这个:在下一行中:static int test = 0;static const int MAX = 4;

由于一个定义规则,第一个将是尝试编译的错误。但第二个将编译没有错误。为什么?

据我了解,两者都具有相同的属性:整个执行存储持续时间、类范围和无链接。

有什么帮助吗?

编辑:在标头中测试外部常量声明:extern const int MAX = 4;强制外部链接产生预期的错误。所以我不明白为什么使用变量它会给我错误,而使用常量却没有。

4

2 回答 2

2

尝试

static const int test = 0;

我有时会注意到头文件中静态 const 变量的立即初始化导致编译器错误。您始终可以在标题中使用声明

class MyClass
{
    // ...
    static const int test;
    // ...
}

并在对应的.cpp文件中初始化

const int MyClass::test = 0;

这应该适用于任何其他类型int

于 2012-08-17T17:56:57.797 回答
1

C++ 中的整数常量实际上并不占用对象中的任何空间,并且通常不像变量那样起作用。把它们想象成在这个特定的上下文中被命名的数字。

于 2012-08-17T17:49:14.620 回答