看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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
nowar100:g() const 是代表你跟編譯器說g()裡面不會去改物件的內容 01/07 23:49
nowar100:return的type要看int g()前面的type 也就是int 01/07 23:49
QQ29:可是這樣compile會錯 因為data他說是const 01/08 00:00
QQ29:VC 編的 01/08 00:01
uest:要不要檢查一下程式? 不應該會錯..因為g() return的是分身.. 01/08 00:06
QQ29:我眼殘了 我return int& 不過如果是int& 不過該怎麼解釋呢 01/08 00:14
QQ29:怎樣解釋說data是const&呢 01/08 00:14
QQ29:const int 打錯 01/08 00:14
uest:int &是reference to data, Foo::g() const就已經說了不給你 01/08 00:15
uest:用這個method改東西 當然不能return data 的 reference出去 01/08 00:17
uest:不然加那個const在g()的後面就沒意義拉~~~您說是吧 01/08 00:18
uest:也就是..const int & Foo::g() const { return data; } -> ok 01/08 00:21
QQ29:恩 只是我不解的是 修飾this跟 他member有啥關係 01/08 01:23
QQ29:compile error是說她變成const int了 01/08 01:23
QQ29:那個const 到底是修飾所有的member還是把this變成 01/08 01:24
QQ29:const* type this; 還是兩者根本一樣? 01/08 01:24
uest:那個const是把this從type * const 變成const type * const 01/08 02:18
uest:所以你不能去動他的member 01/08 02:18
QQ29:其實我好像之前都想基本型態 const int * 是不能修改指到的 01/08 02:33
QQ29:int變數值 現在搞到自訂型態的const 就不知道這const該怎想 01/08 02:34
QQ29:想成指到這type裡面的member都不可修改 可以嗎 01/08 02:35
QQ29:我現在把它想成this底下的member都加上const修飾好了 01/08 02:37
uest:const type * const是說this是一個const pointer 指到一個 01/08 02:45
uest:const instance of type `type` 如果你改了那個instance的 01/08 02:47
uest:member 那麼 這個instance怎麼還會是const呢? 01/08 02:48