看板 C_and_CPP 關於我們 聯絡資訊
class test { public: test() { cout << "Hello" << endl; } }; int main() { test t1; } 與 int main() { test t1(); } 我原本以為它們是同義的,執行結果也相同 不過用 gcc -S 觀看編譯出來的組合語言碼 才發現沒加 () 的版本比有加的版本多了 30 餘行 有 () 版:http://nopaste.csie.org/4c0a4 99 行 無 () 版:http://nopaste.csie.org/25f07 132 行 很好奇,為什麼會有這樣的差異呢? 平台:gcc version 4.4.1 (Ubuntu 4.4.1-4ubuntu9) 編譯指令:g++ test.cpp -S -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.171.46
VictorTom:執行結果不一樣吧?? 後面那個會被當作一個function的 04/19 18:19
VictorTom:宣告吧?? 印象中前陣子也有人問過同樣的狀況XDDD 04/19 18:19
james732:執行結果真的不一樣 我耍笨了....XDDD 04/19 18:26
VictorTom:XD 話說nopaste貼出來的code比較好看, 還有行號說:) 04/19 18:30
james732:問這個笨問題讓我害羞得好想自D...XDDDD 04/19 18:35
VictorTom:疑??這裡有文章的嗎?? 我什麼都沒看到.... (轉頭XD) 04/19 18:39
VictorTom:不過其實我覺得這是一個很有趣其實很容易搞錯的問題.... 04/19 18:39
VictorTom:尤其是和傳參數的constructor一起的時候, 小弟我記得我 04/19 18:40
VictorTom:以前也有這個誤會, 幸好我工作不太需要寫C++....XDDD 04/19 18:40
VictorTom:比如有個test(int){}; 那 test t1(10); 就是有意義的@@" 04/19 18:43
tinlans:這種書上都有寫的問題,還是多看書比較實在,不然三天兩頭 04/20 01:04
tinlans:都被 compiler 咬。其它例子像是: 04/20 01:04
tinlans:list<int> data(istream_iterator<int>(dataFile), 04/20 01:05
tinlans: istream_iterator<int>()); 04/20 01:05
tinlans:也是書上的標準錯誤例子,但是三天兩頭看到有人還是被 04/20 01:06
tinlans:compiler 咬。 04/20 01:07