以下工作原理如何?
#include <limits>
int main()
{
const int* const foo = &std::numeric_limits<int> ::digits;
}
我的印象是,为了获取static const
- ant成员的地址,我们必须在某个翻译单元中对其进行物理定义,以取悦链接器。也就是说,在查看此TU的预处理代码后,我找不到digits
成员(或任何其他相关成员)的外部定义。
我在两个编译器(VC ++ 10和g ++ 4.2.4)上对此进行了测试,并得到了两者相同的结果(即,它可以工作)。链接器是否自动神奇地链接到定义了这个东西的目标文件,或者我错过了一些明显的东西?
答案 0 :(得分:2)
那么,是什么让你认为不定义了?您尝试获取地址成功的事实表明 已在某处定义。当然,它不需要驻留在您的翻译单元中,因此查看预处理器输出没有多大意义。