我一直都覺得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 就更好了.