C++中的Const与Final
我在 C++ 中学习 OOPS,我遇到了关键字const和final. 现在我怀疑它们之间有什么区别。
回答
鉴于存在的其他答案,我想这个问题需要一个答案。
final在 C++ 中你不能应用变量,所以“哪个更好”的问题只能用“ const,因为只有这个才能编译”。
final 说明符被引入到 C++11 并且可以应用:
- 到类,在这种情况下,类不能用作基类
class A final {};
class B: public A {}; //error
- 到
virtual功能,防止派生类从覆盖它
class A {
virtual void foo() = 0;
};
class B: public A {
void foo() final {}
};
class C: public B {
void foo() {} //error
};
const 关键字从一开始就在 C++ 中,用于
- 将变量标记为不可修改。非成员变量必须在声明的地方初始化,成员必须在构造函数初始化列表中初始化。它不像
final在 Java 中,你不能分配给它一次。
const std::vector<int> v;
v = std::vector<int>{}; //error
v.push_back(1); //error
- 将类成员函数标记为可用于
const对象。这也可以防止您修改该函数内的类成员
class A {
int n;
public:
int getN() const {return n;}
void setN(int n) {this->n = n;} //cannot be const, modifies a member
};
const A a;
a.getN(); //fine
a.setN(5); //error