1

我相信代码无法编译,因为我正在extern const int j使用. 但是根据标准,为什么这是错误的? iclass A

档案啊

extern const int j;

class A
{
    static const int i = j;     //  error C2057:expected constant expression
};

文件 A.cpp

#include "A.h"

const int j = 10;

int main()
{
    A a;
}
4

1 回答 1

1

j是一个常量变量,而不是编译时常量。

编译器无法知道编译j的翻译单元中的值class A。例如,以下将起作用:

static const int j = 10;

class A
{
    static const int i = j;
};

请注意,在这种情况下j不会是全局的,但每个 TU 都会存在一个副本。这个片段只是为了证明一个观点。

于 2012-07-05T21:39:53.223 回答