Re: [問題] 類別初始化

看板C_and_CPP (C/C++)作者 (noOneKnows)時間14年前 (2012/01/05 23:55), 編輯推噓0(0015)
留言15則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《applecool (noOneKnows)》之銘言: : 不好意思我想請教一下語法? : 雖然編譯出來也沒看到錯誤,但是想知道是不是標準語法? : (有查過手邊一兩本書,好像沒看到類似的寫法) : 舉例: : class A { : public: : int &a0, &a1; A(int &x0, int &x1) : a0(x0), a1(x1) {} 抱歉我之前的確寫錯了,那這樣寫是對嗎?? : }; : class B { : public: : const int a0; : A temp; B(int &x0, int &x1) : a0(x0), temp(x0, x1) {} 似乎也要這樣改??? : // ~~~~~~~~~~~~ : // 其實想問這一段 抱歉我真的不太會寫程式, 我C++看書自學卻有點沒章法, 我本來以為應該寫 temp(A(x0, x1)) 結果不小心寫成 temp(x0, x1) 編譯也過,想說這是不是C++標準語法??? : }; : 謝謝 預期行為是 temp a0, a1 可以更動外面傳來 x0, x1 的值 感覺之前那篇變成 temp 的 a0, a1 指向的變數在完成 temp 初始化之後被釋放掉, 跟這篇 a0, a1 還是跟傳進來 的 x0, x1 的指標有關,行為不同 不曉得這樣理解是不是又錯了... 感謝各位版友回答 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.110.137.131

01/06 00:04, , 1F
你為什麼在宣告變數前面也要加上&,function
01/06 00:04, 1F

01/06 00:05, , 2F
那邊加上&可以理解成Call by reference,變數那就不
01/06 00:05, 2F

01/06 00:05, , 3F
太懂了
01/06 00:05, 3F

01/06 01:29, , 4F
你改過以後的就是對的了 temp(x0, x1)是call A的ctor
01/06 01:29, 4F

01/06 01:30, , 5F
A::A(int&, int&) 如果寫成temp(A(x0, x1))會call copy ctor
01/06 01:30, 5F

01/06 01:30, , 6F
來建構temp
01/06 01:30, 6F

01/06 01:35, , 7F
聽起來 temp(x0, x1) 好像比 temp(A(x0,x1)) 來得好??
01/06 01:35, 7F

01/06 01:36, , 8F
我只是指初始 temp 來說
01/06 01:36, 8F

01/06 01:39, , 9F
是的 後者會先建構一個暫時的A 再用這個暫時的A去建構temp
01/06 01:39, 9F

01/06 01:40, , 10F
不過通常好的compiler都可以這個多餘的copy省略掉
01/06 01:40, 10F

01/06 01:40, , 11F
這樣我了解 temp(x0, x1) 正確了~~感謝
01/06 01:40, 11F

01/06 01:41, , 12F
原本寫在class的初始list總覺得心裡毛毛的
01/06 01:41, 12F

01/06 01:43, , 13F
diabloevagto: class member也可以是reference啊
01/06 01:43, 13F

01/06 01:45, , 14F
01/06 01:45, 14F

01/06 01:47, , 15F
我以前都用指標,但我猜對編譯器來說都差不多吧。
01/06 01:47, 15F
文章代碼(AID): #1F1SVxIM (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1F1SVxIM (C_and_CPP)