Re: [問題] 關於if statement的實作方法

看板C_and_CPP作者 (noOneKnows)時間12年前 (2013/05/05 01:04), 編輯推噓0(007)
留言7則, 2人參與, 最新討論串2/2 (看更多)
我不是故意找碴 只是想提醒如果 && 是 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

05/05 01:08, , 1F
感謝提醒!
05/05 01:08, 1F

05/05 01:09, , 2F
我想如果你說 operator overloading 會更準確
05/05 01:09, 2F

05/05 01:19, , 3F
因為編譯器會展開成 function call 的形式
05/05 01:19, 3F

05/05 01:20, , 4F
所以並非重載是一個例外,是 C++ 本質就是如此
05/05 01:20, 4F

05/05 01:33, , 5F
瞭解
05/05 01:33, 5F

05/05 01:34, , 6F
不好意思,多謝你的補充了
05/05 01:34, 6F

05/05 01:34, , 7F
我下次會說清楚些
05/05 01:34, 7F
文章代碼(AID): #1HXJ-P0k (C_and_CPP)
文章代碼(AID): #1HXJ-P0k (C_and_CPP)