C++相談室 part166at TECHC++相談室 part166 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト990:デフォルトの名無しさん 26/01/29 10:53:12.91 YJ+F37lYM.net C言語では、const int g_a = 5; と書いても、obj ファイルの中では、 g_a がマングル化されてなかったので、const 修飾されているかの情報が obj ファイルの中では失われていた。 だから、ある翻訳単位 A では、 int g_a = 5; と変数 g_a を定義し、別の翻訳単位 B では、 extern const int g_a; と変数 g_a を宣言することも可能で、 その意味は、翻訳単位Bでは、書き換えないが、 別の翻訳単位(Aなど)では、書き換える可能性がある、ということだった。 しかし、C++ では、const int g_a; と宣言された変数 g_a は、 どの翻訳単位でも書き換えられなくする設計となっている (objファイルの中で名前がマングル化されているのでそれが可能となった)。 その結果、C言語では、g_a をマクロ的には扱ってはならないが、 C++ では、g_a をマクロ的に扱ってもいいという事になる。 これらの現象は、obj ファイルの中で変数名 g_a がマングル化されるかどうかと 切っても切れないような関係にある。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch