【问题标题】:STL Static-Const Member DefinitionsSTL 静态常量成员定义
【发布时间】:2010-04-23 01:41:03
【问题描述】:

以下是如何工作的?

#include <limits>

int main()
{
  const int* const foo = &std::numeric_limits<int> ::digits;
}

我的印象是,为了获取static const-ant 成员的地址,我们必须在某些翻译单元中物理定义它,以取悦链接器。也就是说,在查看此 TU 的预处理代码后,我找不到 digits 成员(或任何其他相关成员)的外部定义。

我在两个编译器(VC++ 10 和 g++ 4.2.4)上对此进行了测试,并从两者中得到了相同的结果(即,它可以工作)。链接器是否会自动链接到定义了这些东西的目标文件,还是我在这里遗漏了一些明显的东西?

【问题讨论】:

    标签: c++ static constants definition linkage


    【解决方案1】:

    嗯,是什么让你认为它是没有定义的?您尝试获取地址自动成功的事实表明它在某处定义。当然,它不需要驻留在您的翻译单元中,因此查看预处理器输出没有多大意义。

    【讨论】:

    • 嗯,有两件事:1)我认为限制标题可能会将它带入我的翻译单元。似乎并非如此。 2) 我查看了 VS 的链接器命令行,找不到任何被隐式指定的“外来”目标文件。
    • @javery:外国人?为什么是外国的?定义必须是标准库的一部分。您正在链接标准库,不是吗?
    • “外来”是指对我自己的文件来说是外来的;包括标准库。对困惑感到抱歉。 :)
    • @javery:您的代码仅包含标准头文件。标准库的“肉”位于……嗯……在一个中,它通常隐式链接到您的项目中。
    • 找到了。就像你说的,隐式链接。感到困惑,因为它没有在任何地方明确列为附加依赖项。干杯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多