在 C++ 中,有静态和非静态 const
数据成员。
当我想要一个常量时,我总是将其设置为 static
,因为如果项目无法修改,那么拥有多个拷贝(每个类的每个实例一个)是没有意义的。我想知道为什么会有非静态 const
成员?
最佳答案
class MyClass
{
public:
MyClass(int val): myVal(val) {}
const int myVal;
};
在这个小例子中,myVal
在没有 getter 方法的情况下对每个人都是可读的,但是一旦 MyClass 被实例化,它就不可修改。
如果您想确保以后不修改数据类型,您只需将数据类型声明为 const
。
因为 myVal
不是 static
,它可以为 MyClass
的每个不同实例提供不同的值。如果 myVal
是 static
,那么它对于每个实例都将具有相同的值,并且不能由构造函数分配。
举个例子
#include <iostream>
using namespace std;
class MyClass
{
public:
MyClass(int val) : myConst(val) {}
void printVars() {
cout << "myStatic " << myStatic << endl;
cout << "myConst " << myConst << endl;
}
static const int myStatic;
const int myConst;
};
const int MyClass::myStatic = 5; //Note how this works without
//an instance of MyClass
int main()
{
MyClass ca(23);
MyClass cb(42);
cout << "ca: " << endl;
ca.printVars();
cout << "cb: " << endl;
cb.printVars();
return 0;
}
结果:
ca:
myStatic 5
myConst 23
cb:
myStatic 5
myConst 42
以下将导致编译错误,因为变量是常量:
ca.myConst = 11;
ca.myStatic = 13;
关于c++ - 什么时候非静态 const 数据成员比 const 静态数据成员更有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23041169/