看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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
diabloevagto:你為什麼在宣告變數前面也要加上&,function 01/06 00:04
diabloevagto:那邊加上&可以理解成Call by reference,變數那就不 01/06 00:05
diabloevagto:太懂了 01/06 00:05
PkmX:你改過以後的就是對的了 temp(x0, x1)是call A的ctor 01/06 01:29
PkmX:A::A(int&, int&) 如果寫成temp(A(x0, x1))會call copy ctor 01/06 01:30
PkmX:來建構temp 01/06 01:30
applecool:聽起來 temp(x0, x1) 好像比 temp(A(x0,x1)) 來得好?? 01/06 01:35
applecool:我只是指初始 temp 來說 01/06 01:36
PkmX:是的 後者會先建構一個暫時的A 再用這個暫時的A去建構temp 01/06 01:39
PkmX:不過通常好的compiler都可以這個多餘的copy省略掉 01/06 01:40
applecool:這樣我了解 temp(x0, x1) 正確了~~感謝 01/06 01:40
applecool:原本寫在class的初始list總覺得心裡毛毛的 01/06 01:41
PkmX:diabloevagto: class member也可以是reference啊 01/06 01:43
PkmX:http://ideone.com/SmTuN 01/06 01:45
applecool:我以前都用指標,但我猜對編譯器來說都差不多吧。 01/06 01:47