#include <iostream>
int main() {
if(1 == 2, true) {
std::cout << "right" << std::endl;
} else std::cout << "left" << std::endl;
return 0;
}
その出力 '正しい'、それはそう常にありますか?
コンパイラは、使用されなかった左オペランドを最適化することができますか?唯一、私はリリースではこのような構成を使用することができるだろう
if(doSomethingHereWhichAlwaysReturnsTrue,
doSomeOtherHereAndDependOnTheResultExecuteBodyOrNot) {
..body.. - execute if 'doSomeOther' returns true
}
このコードをデバッグです:
warning: left operand of comma operator has no effect [-Wunused-value]
if(1 == 2, true) {
~~^~~~
は、私はこのようないくつかのコードを持っています。私ははだと思います。
は二回聞かないために、私はまたのような連鎖を時々割り当てを使用しています:
int i, j, k, l;
i = j = k = l = 0;
は、それが安全なのですか?
実行順序が定義されていないと聞いたので、これは未定義の動作です。 UBとしては、コンパイラによって明確に最適化することができますが、 '-O3 -Wall -pedantic'を使用すると警告が表示されません。予想通りの結果です。ここにはの問題はありません。
「2回質問しないでください」どうしてですか?異なる質問は、別々の質問投稿に行くべきです。 – MikeCAT
@MikeCAT、クエリを集約するちょうど合理的な習慣 –
2つの質問はお互いに関連していない、彼らは別個の質問と別個の回答を受けるに値する。 – user463035818