私のコードを最適化するための簡単な質問があります。if()文の仕組み
bool myfunc();
if (false && true && myfunc())
{
}
myfunc()
と呼ばれますか?結果は確かに知られると
私のコードを最適化するための簡単な質問があります。if()文の仕組み
bool myfunc();
if (false && true && myfunc())
{
}
myfunc()
と呼ばれますか?結果は確かに知られると
号
&&
と||
は(&&
と||
ためtrue
ためfalse
)、すなわち、評価停止を短絡評価を持っています。そして、それは常に厳密に左から右です。
この場合、コンパイル時に条件がfalse
であることが判明し、その後コードに到達できないため、if
ステートメントを完全に削除することもできます。
にありますおかげさまで助けを借りてください – harut9
正確には、組み込み論理式だけが短絡セマンティクスを持っています。演算子がオーバーロードされると、式は通常の関数呼び出しになります。 –
C++は条件式がshort-circuit evaluationであるため、最初のfalse
は式全体をfalseにするため、関数は呼び出されません。
注文を変更すると、最初に関数呼び出し(つまり、myfunc() && false && true
)を入力すると、その関数が呼び出されます。式の結果は、myfunc
が返っても、まだfalse
になります。
あなたの答えのように注文書を書く場合、コンパイラはif文全体とそのスコープ内のすべてを最適化しませんか?または、そこに例外がある場合は関数を呼び出しますか? – Chiel
@Chiel関数が別の翻訳単位の外部関数である場合、コンパイラはその関数やその副作用を知ることができないので、関数呼び出しを最適化することはできません。それが最適化できるのは、呼び出し以外は何もしないで、戻り値を無視するということです。 –
いいえ、myfunc()
は、最初のfalse
のために呼び出されません。コンパイラはそこで停止します。短絡評価と呼ばれています。
要約:いいえ、それは呼び出されません。 –
いいえ。if条件は、最初のfalseで停止し、他の2つの条件をテストしません。 – Drakes
人。答えは_ANSWER SECTION_ –