には影響しません。私は、簡単なプログラムを書きました。実際に生成されたマシンコードがループ内で結果を評価:constexprののkeyworkは、コード生成
mov edx, offset aHelloWorld ; "hello world"
loc_408D00:
add edx, 1
mov eax, edx
sub eax, offset aHelloWorld ; "hello world"
cmp byte ptr [edx], 0
jnz short loc_408D00
leave
retn
プログラムは、フラグ-std=c++11 -Ofast -O2
とG ++バージョン5.3でコンパイルされています。 Visual Studio 2013とg ++ 4.9で得たのと同じ結果です。
Quaestionコンパイラが指定されたコードを最適化できなかった理由は何ですか?
g ++とclang ++の両方がコードを最適化します。これはコンパイラの実装に依存します。 –
@VittorioRomeo g ++のバージョンと必要なコンパイルフラグを言うことができますか? –
GCC 6、ICC 16、およびClang 3.1はすべて、単純に値11をロードして戻ります。これらは対話型の解体サイト[gcc.godbolt.org](http://gcc.godbolt.org/)にあります。また、Microsoft C++ 19.10(私はどのVisual Studioも知らない)は、Dineshの答えでさえも最適化できません。 – Potatoswatter