9

C++ のプレーン定数変数は、デフォルトで内部リンケージになります。私が次のものを持っているとします:

  • ヘッダー ファイルで const 変数を定義します( const int var = 2)

  • 次に、ヘッダーを 2 つの cpp ファイルに含めます。

&var両方の cpp ファイルでその const 変数 (つまり ) のアドレスを取得しようとすると、それら 2 つのアドレスは同じになりますか? また、この事実を確認するための小さな作業コードが必要です。

私は初心者なので、このスレッドで提供されたこの回答のコメントで質問できなかったため、これを質問として投稿する必要がありました。

4

3 に答える 3

5

内部リンケージのためC++に同じではないため、これらは 2 つの異なるオブジェクトです。これCは逆で、const外部リンケージがあるため、再定義によりリンケージ エラーが発生します。

于 2012-11-23T13:41:20.807 に答える
2

では、それらの 2 つのアドレスは同じでしょうか?

いいえ。ヘッダーはコンパイル中に *.cpp ファイルに含まれるため、ヘッダーを含むすべての *.cpp は独自の定数を作成します。

ただし、extern const int var;ヘッダーで使用し、*.cpp でデフォルト値を設定する場合、それらは同じである必要があります。

于 2012-11-23T15:23:48.260 に答える
0

変数のアドレスは異なります。また、どこでも変数アドレスを参照しないと、コンパイル中に変数がその値に置き換えられ、バイナリで変数値がまったく見つからない可能性があります。

于 2012-11-23T14:03:51.237 に答える