3

以下はどのように機能しますか?

#include <limits>

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

static const-ant メンバーのアドレスを取得するには、リンカを満足させるために何らかの変換単位で物理的に定義する必要があるという印象を受けました。とはいえ、この TU の前処理されたコードを見た後、digitsメンバー (または他の関連メンバー) の外部定義を見つけることができませんでした。

これを 2 つのコンパイラ (VC++ 10 と g++ 4.2.4) でテストしたところ、両方から同じ結果が得られました (つまり、動作します)。リンカーは、このようなものが定義されているオブジェクト ファイルに対して自動的に魔法のようにリンクしますか、それともここで明らかな何かが欠けていますか?

4

1 に答える 1

2

さて、それが定義されていないと思う理由は何ですか?アドレスを取得する試みが成功したという事実は、それがどこかに定義されていることを自動的に示しています。もちろん、翻訳単位に常駐する必要はないので、プリプロセッサの出力を調べてもあまり意味がありません。

于 2010-04-23T01:50:58.177 に答える