[問題] 關於建構子/解構子的呼叫

看板C_and_CPP (C/C++)作者 (小J)時間15年前 (2011/01/10 21:55), 編輯推噓6(6013)
留言19則, 7人參與, 最新討論串1/2 (看更多)
#include <iostream> using std::cerr; using std::endl; class X { public: X() { cerr << "X()" << endl; } ~X() { cerr << "~X()" << endl; } }; class Y { public: Y() { cerr << "Y()" << endl; } ~Y() { cerr << "~Y()" << endl; } }; int main(){ X a; Y b(); } 以main內的程式來講 我知道宣告class時會呼叫建構子,刪除後會呼叫解構子 但是實際上跑以上程式的結果 X會呼叫建構子與解構子沒錯 但是Y卻不會 這是為什麼? 然後Y b();是什麼意思? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.182.10

01/10 22:02, , 1F
你把他跟 void func(); 這樣對照,有沒有看出來~
01/10 22:02, 1F

01/10 22:03, , 2F
Y b () ;
01/10 22:03, 2F

01/10 22:09, , 3F
你那樣寫是宣告一個回傳Y的b函式
01/10 22:09, 3F

01/10 22:17, , 4F
所以Y b()只是在main 裡面宣告一個函式b..回傳值為Y
01/10 22:17, 4F

01/10 22:21, , 5F
樓上全部回答錯.main裡面怎麼可以宣告函式 老天
01/10 22:21, 5F

01/10 22:39, , 6F
這我也覺得很奇怪= =a
01/10 22:39, 6F

01/10 22:39, , 7F
c大,樓上們是對的,primer 4e 12-4 p460 指出,這種用法
01/10 22:39, 7F

01/10 22:39, , 8F
因為之前沒看過Y b();的寫法..可能是我才剛接觸
01/10 22:39, 8F

01/10 22:39, , 9F
compiler 會過,而且沒錯(實際可能會有 warnning)
01/10 22:39, 9F

01/10 22:40, , 10F
只是實際上把 b 當作是 class obj 調用時才會出錯.
01/10 22:40, 10F

01/10 22:40, , 11F
main裡面確實可以宣告函式...
01/10 22:40, 11F

01/10 22:43, , 12F
lol 函式裡還可以定義 struct 咧
01/10 22:43, 12F

01/10 22:44, , 13F
謝謝t大,我從primer內看到了
01/10 22:44, 13F

01/10 22:44, , 14F
那這樣宣告一個函式要怎麼用他
01/10 22:44, 14F

01/10 22:46, , 15F
使用大概像這樣 http://nopaste.csie.org/a59fe
01/10 22:46, 15F

01/10 22:47, , 16F
D大是問class還是問main裡再宣告function?
01/10 22:47, 16F

01/10 22:57, , 17F
我掉進c++的語法陷阱裡了 對不起各位orz
01/10 22:57, 17F

01/10 22:57, , 18F
我錯了 請不要理我那個推文
01/10 22:57, 18F

01/10 23:20, , 19F
在main裡面的function的使用 不過james大跟我說了
01/10 23:20, 19F
文章代碼(AID): #1DAm_Wdq (C_and_CPP)
文章代碼(AID): #1DAm_Wdq (C_and_CPP)