32+84
は、コンパイラが任意の変数の値を知ることなく値を計算することができる算術式の基本的なCおよびC++標準の用語である「定数式」です。定数式は、あなたの
int global2=32+84;
技術的にはどちらもCも、標準C++のように、グローバル変数を初期化するために使用される場合ははさらに必要とコンパイル時に評価されるように、しかし、あなたは、ハード押されたことと思いますそのようにしなかったコンパイラを見つけることができます。 (コンパイラが実際にコンパイル時に定数式を評価しなければならない他のコンテキストもあるので、それを行うコードを持たなければならないので、常にそうするかもしれません)。
global1+global2
は "定数表現 "と呼ばれる。 Cでは、グローバル変数の初期化には使用できません。コンパイル時にエラーが発生します。 C++では、許可されており、コンパイル時または実行時に追加が行われるかどうかは不明です。唯一の保証は、main
が実行を開始するまでにglobal3
が正しい値を持つことです。特に、ではなく、がグローバルオブジェクトのコンストラクタから観察された場合に正しい値を持つ可能性があります。
C++で(
を(経験的に、G ++ 6 ++ 3.9を打ち鳴らすことは、両方の可能性が実際に発生したことを確認するコンパイル時間でそれを行うのに対し、実行時にglobal3
の値を計算する)が、ないでglobal1
とglobal2
両方がconst
宣言されていた場合はC、global1+global2
は定数式と考えられる。)
これは[有効ではありません](https://ideone.com/NB6oJ0)です。 –
申し訳ありません。タグが修正されました。ありがとう! –