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