C++では、コンパイル時に実行される式を解決しているか、実行時にも実行できますか?私はC++での式の解決
時間に
x = 2 + 3;
をコンパイルし、実行時
x = a + b;
注以下の私の例のとおり、これらの状況を考えています :の値aとbは、実行時にコンソールから取得されます。
C++では、コンパイル時に実行される式を解決しているか、実行時にも実行できますか?私はC++での式の解決
時間に
x = 2 + 3;
をコンパイルし、実行時
x = a + b;
注以下の私の例のとおり、これらの状況を考えています :の値aとbは、実行時にコンソールから取得されます。
添加する変数の値がない場合、式がコンパイル時に評価されないでき、コンパイル時に(例えばconst int a = 5;
)固定。この場合、値はコマンドラインから来るので、式はコンパイル時に評価されなければなりません。
コンパイラによって異なります。最新のコンパイラの多くは、一定の折り畳みを実行します。つまり、2 + 3
などの式はコンパイル時にすでに解決されています。しかし、一定のフォールディングが適用される度合いは、コンパイラによって異なります。それは本当にスマートかもしれないし、まったくないかもしれない。
constexpr
として定義された式は、コンパイル時に常に計算されることに注意してください。 constexpr
式には、コンパイラが式を完全に評価できることを保証する一定の制限があります。現時点では、この制限は、標準への各連続的な更新で取り戻されるように見えます。
これは、 'const x = a + b;と書かれていると、やや誤解を招く。 const y = x + 1; 'では、xとyがconstであっても、コンパイル時の評価は実際にはありません。 'const'は、私たちがそれを変更しないことを約束することを意味します。必ずしもコンパイル時に計算可能であるとは限りません。 –
C++ 98では、私はあなたに同意します。 C++ 11では、 'constexpr'が景観を変えます。 C++ 14では、 'constexpr'はコンパイル時にODR以外のほとんどのものを実行可能にします。 – Tim