【问题标题】:extern const array does not link [duplicate]extern const 数组不链接[重复]
【发布时间】:2012-11-14 12:35:19
【问题描述】:

可能重复:
Why does const imply internal linkage in C++, when it doesn’t in 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 限定符使链接成功。任何想法为什么会失败?

谢谢。

【问题讨论】:

    标签: c++ arrays constants extern


    【解决方案1】:

    当编译器编译b.cpp 时,据它所知,ArrayOfInts[0] 的值可以是任何值。所以它不是编译时常量。在 C++ 中,文件范围的常量默认是编译时常量。

    【讨论】:

    • 您可以通过声明 extern const 在文件范围内使用外部链接创建一个常量。
    • 我会在答案末尾添加“默认”。
    • "在 C++ 中,文件范围的常量默认是编译时常量。" - 认为这只适用于简单的整数类型。感谢您的澄清。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 2016-10-22
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多