Re: [問題] overloading [] 疑問!!

看板C_and_CPP (C/C++)作者 (我愛阿蓉)時間16年前 (2010/01/07 23:35), 編輯推噓0(0025)
留言25則, 3人參與, 最新討論串3/3 (看更多)
※ 引述《littleshan (我要加入劍道社!)》之銘言: : 我覺得你的問題在於你可能不太清楚 const member function 的意義。 : 所謂的 const member function 就是在宣告時於宣告式後加上 const: : class Foo { : public: : void f(); // normal member function : int g() const; // const member function : private: : int data; : }; : const member function 的意思是在這個 function 中,並不會去改變 : 物件中的 member variable(註)。因此若你宣告一個 const Foo 物件, : 你不能呼叫 f(),因為 f() 的內部可能會改變 member variable,但 : 你可以呼叫 g()。 : void Foo::f() : { : data = 10; // OK : } : int Foo::g() const : { : data = 10; // 錯誤,g() 是 const member function,不能修改 data : return data; // 這行 OK,因為 return 並不會改變 data 的值 ^^^^^^^ : } 剛剛對const有點模糊了... 爬了文 可是我發現little大這例子好像有點問題 我之前也是看這篇 觀念上說 const是修飾this 但是return data 這個data好像也會被冠上const 所以這樣return會compile 錯 想問一下修飾this 意思是說 他底下的member都被冠上const嗎? 不太會解讀 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.73.81

01/07 23:49, , 1F
g() const 是代表你跟編譯器說g()裡面不會去改物件的內容
01/07 23:49, 1F

01/07 23:49, , 2F
return的type要看int g()前面的type 也就是int
01/07 23:49, 2F

01/08 00:00, , 3F
可是這樣compile會錯 因為data他說是const
01/08 00:00, 3F

01/08 00:01, , 4F
VC 編的
01/08 00:01, 4F

01/08 00:06, , 5F
要不要檢查一下程式? 不應該會錯..因為g() return的是分身..
01/08 00:06, 5F

01/08 00:14, , 6F
我眼殘了 我return int& 不過如果是int& 不過該怎麼解釋呢
01/08 00:14, 6F

01/08 00:14, , 7F
怎樣解釋說data是const&呢
01/08 00:14, 7F

01/08 00:14, , 8F
const int 打錯
01/08 00:14, 8F

01/08 00:15, , 9F
int &是reference to data, Foo::g() const就已經說了不給你
01/08 00:15, 9F

01/08 00:17, , 10F
用這個method改東西 當然不能return data 的 reference出去
01/08 00:17, 10F

01/08 00:18, , 11F
不然加那個const在g()的後面就沒意義拉~~~您說是吧
01/08 00:18, 11F

01/08 00:21, , 12F
也就是..const int & Foo::g() const { return data; } -> ok
01/08 00:21, 12F

01/08 01:23, , 13F
恩 只是我不解的是 修飾this跟 他member有啥關係
01/08 01:23, 13F

01/08 01:23, , 14F
compile error是說她變成const int了
01/08 01:23, 14F

01/08 01:24, , 15F
那個const 到底是修飾所有的member還是把this變成
01/08 01:24, 15F

01/08 01:24, , 16F
const* type this; 還是兩者根本一樣?
01/08 01:24, 16F

01/08 02:18, , 17F
那個const是把this從type * const 變成const type * const
01/08 02:18, 17F

01/08 02:18, , 18F
所以你不能去動他的member
01/08 02:18, 18F

01/08 02:33, , 19F
其實我好像之前都想基本型態 const int * 是不能修改指到的
01/08 02:33, 19F

01/08 02:34, , 20F
int變數值 現在搞到自訂型態的const 就不知道這const該怎想
01/08 02:34, 20F

01/08 02:35, , 21F
想成指到這type裡面的member都不可修改 可以嗎
01/08 02:35, 21F

01/08 02:37, , 22F
我現在把它想成this底下的member都加上const修飾好了
01/08 02:37, 22F

01/08 02:45, , 23F
const type * const是說this是一個const pointer 指到一個
01/08 02:45, 23F

01/08 02:47, , 24F
const instance of type `type` 如果你改了那個instance的
01/08 02:47, 24F

01/08 02:48, , 25F
member 那麼 這個instance怎麼還會是const呢?
01/08 02:48, 25F
文章代碼(AID): #1BHVysHv (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1BHVysHv (C_and_CPP)