作者applecool (noOneKnows)
看板C_and_CPP
標題Re: [問題] 關於if statement的實作方法
時間Sun May 5 01:04:23 2013
我不是故意找碴
只是想提醒如果 && 是 function call 那完全是另外一回事情
#include <cstdio>
int tmp = 0;
struct A {
A() { printf("%d\n", ++tmp); }
bool operator&&(const A &x) { return false; }
};
int main() {
typedef A B;
if(A() && B());
getchar();
return 0;
}
這樣 A() B() 都會執行
※ 引述《cybernetics (cybernetics)》之銘言:
: Hi all.
: 請問一下,在C語言中下面的寫法:
: if(A() && B() && C())
: {
: ...
: }
: 在我使用的compiler中(uVersion3),只要A()回傳fail,
: B()和C()就_不會_被執行。
: 請問一下,在compiler實作中,上述的情況是定義好永遠為真的流程嗎?
: 或是這取決於各家compiler實作的方式?
: 又,如果我想確定各個函式是否會被執行,是不是就得避免上述的寫法?
: 感謝回答。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.110.160.121
→ diabloevagto:感謝提醒! 05/05 01:08
→ diabloevagto:我想如果你說 operator overloading 會更準確 05/05 01:09
→ applecool:因為編譯器會展開成 function call 的形式 05/05 01:19
→ applecool:所以並非重載是一個例外,是 C++ 本質就是如此 05/05 01:20
→ diabloevagto:瞭解 05/05 01:33
→ applecool:不好意思,多謝你的補充了 05/05 01:34
→ applecool:我下次會說清楚些 05/05 01:34