C++ const 類對象相關備忘

來源:互聯網
上載者:User

我一直都覺得java 的final關鍵字和 c++ 的 const關鍵字的作用比較相近, 通過對c++ 更深入的學習, 漸漸知道了他們的一些區別.

      

1. Java 的final 是能修飾class的, c++的 const雖然也能寫在class 前面, 但是貌似沒作用. (不是很確定)

 

2. c++ 對 const 修飾的類對象保護要好於 java 的 final

Java:

final ClassA a = new ClassA();

     a = b;           //error: 常量是不能左值修改的

     a.setValue(10);    //ok: 修改對象a的成員變數卻是可以的, 這樣就不是很符合用final 的初衷了

     a.getValue();      //ok

 

c++:

     const classC c();

     classC d();

     c = d;           //error: 常量是不能左值修改的

     c.setValue(10);    //error: setValue方法必須是const, 並且setValue 方法不能修改 對象c 的 成員變數

     d.setValue(10);    //ok: setValue 方法是不是 const 都可以, 並且 setValue 方法能修改對象 d 的成員變數

 

ps: ClassA, classC 分別是java 和 c++ 的類, a, b, c 和 d 是類對象, setValue 方法是改變這些類對象的某個成員變數.

 

以上可以看出 c++ 的 const 類對象, 只能調用其 const 的方法, 並且這些 const 方法是不能修改成員變數的, 這個const 方法可以被 非const 類對象調用.

 

a.setValue(10) 可以執行, 而運行c.setValue(10) 是錯誤的, 一對比就知道 c++ 對常量類對象的保護是好於 java 的.

 

C++  類中像getValue 這樣的方法, 基本可以用const 修飾, 加上 inline 就更好了.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.