3

以下如何工作?

#include <limits>

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

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

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

4

1 回答 1

2

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

于 2010-04-23T01:50:58.177 回答