1

extern const int jで初期化iするためにを使用しているため、コードはコンパイルされないと思いますclass 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 に答える