2

重複の可能性:
const は、C では内部リンケージを意味しないのに、C++ では内部リンケージを意味するのはなぜですか?

私が以下を持っている場合:

a.cpp:

const int ArrayOfInts[] = {1, 2, 3, 4, 5};

b.cpp:

extern const int ArrayOfInts[];

void SomeFunc()
{
    int a = ArrayOfInts[0];
}

リンカは、ArrayOfInts が b.obj から解決されていないと文句を言います。const 修飾子を削除すると、リンクが成功します。これが失敗する理由はありますか?

ありがとう。

4

1 に答える 1

0

コンパイラが をコンパイルするとき、コンパイラb.cppが知っている限りでは、 の値はArrayOfInts[0]何でもかまいません。したがって、コンパイル時の定数ではありません。C++ では、ファイル スコープの定数は既定でコンパイル時の定数です。

于 2012-11-14T12:41:04.157 に答える