[問題] 建立物件有沒有加 () 的差別

看板C_and_CPP (C/C++)作者 (好人超)時間16年前 (2010/04/19 18:04), 編輯推噓4(4012)
留言16則, 3人參與, 最新討論串1/1
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

04/19 18:19, , 1F
執行結果不一樣吧?? 後面那個會被當作一個function的
04/19 18:19, 1F

04/19 18:19, , 2F
宣告吧?? 印象中前陣子也有人問過同樣的狀況XDDD
04/19 18:19, 2F

04/19 18:26, , 3F
執行結果真的不一樣 我耍笨了....XDDD
04/19 18:26, 3F

04/19 18:30, , 4F
XD 話說nopaste貼出來的code比較好看, 還有行號說:)
04/19 18:30, 4F

04/19 18:35, , 5F
問這個笨問題讓我害羞得好想自D...XDDDD
04/19 18:35, 5F

04/19 18:39, , 6F
疑??這裡有文章的嗎?? 我什麼都沒看到.... (轉頭XD)
04/19 18:39, 6F

04/19 18:39, , 7F
不過其實我覺得這是一個很有趣其實很容易搞錯的問題....
04/19 18:39, 7F

04/19 18:40, , 8F
尤其是和傳參數的constructor一起的時候, 小弟我記得我
04/19 18:40, 8F

04/19 18:40, , 9F
以前也有這個誤會, 幸好我工作不太需要寫C++....XDDD
04/19 18:40, 9F

04/19 18:43, , 10F
比如有個test(int){}; 那 test t1(10); 就是有意義的@@"
04/19 18:43, 10F

04/20 01:04, , 11F
這種書上都有寫的問題,還是多看書比較實在,不然三天兩頭
04/20 01:04, 11F

04/20 01:04, , 12F
都被 compiler 咬。其它例子像是:
04/20 01:04, 12F

04/20 01:05, , 13F
list<int> data(istream_iterator<int>(dataFile),
04/20 01:05, 13F

04/20 01:05, , 14F
istream_iterator<int>());
04/20 01:05, 14F

04/20 01:06, , 15F
也是書上的標準錯誤例子,但是三天兩頭看到有人還是被
04/20 01:06, 15F

04/20 01:07, , 16F
compiler 咬。
04/20 01:07, 16F
文章代碼(AID): #1Bp2gsCB (C_and_CPP)
文章代碼(AID): #1Bp2gsCB (C_and_CPP)