アセンブラを読んでみると、;もちろん実体は定義されてない。8ret.cfi_endproc■(test2-2)最適化してみる。;フラグを見て、条件にあうならeaxをebxへ。[rbp+67]まさかの分岐命令...なし...!?cmovlはこちら参考。何度もstd::coutの関数を呼ぶのでなく、出力関数は一度だけのようです。■(test2-3)じゃ素直にif文を使う。if文で同じことをしましょう。成功してしまいました。8ret.cfi_endproc分岐命令で割り振るまでは三項演算子と同じ。if文の場合はインラインで定数を書いてくれるみたいですね。ちなみに、最適化をかけたときの結果は、三項演算子の時と殆ど同じになりました(test2-4)。残りのテストの結果は上記の結果から推測できる面白くない結果だったので概要だけ。test3:三項演算子でも実体が書き加えてあればちゃんと動作します。test4-1:テンポラリな変数に三項演算子を代入するのでなく、そのままstd::coutに突っ込むところに直接書きました。test4-2:4-1をコンパイルする際に最適化を掛けると、やっぱり大丈夫でした。■どうやら、三項演算子はif文に展開されたりするわけではなく、別扱いになっていて、最適化フラグが掛からないときは扱いが少し違う...そんな感じでしょうか。gccのソースは読んでないのでわかりませんが...。エミュレータで実体を定義し忘れてたのになぜか動いていたのですが、三項演算子を使ったところでコンパイルエラーでした。実体を定義する前にVC++でビルドしてたので、VC++も同じようにやってくれるみたいですが、最適化の結果どうなるのか、とかは確かめてないです。■けつろん!ちゃんと実体書こう!define替わりに使うならenumハックを検討しよう!ほんとC++は黒魔術やでぇ...いえ、仕様通り書かない私が悪いんです。動いちゃうのもちょっと困るよ...。ψ(プサイ)なにやら物騒なタイトルで。