看板 C_and_CPP 關於我們 聯絡資訊
我不是故意找碴 只是想提醒如果 && 是 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