有一个常量 myConst 需要输出。最好的使用方法是什么:
class MyClass {
public:
const int myConst = 10;
};
int main() {
MyClass* myclass = new MyClass();
std::cout << myclass->myConst << std::endl;
delete myclass;
return 0;
}
或者
class MyClass {
public:
static const int myConst = 10;
};
int main() {
std::cout << MyClass::myConst << std::endl;
return 0;
}
他们之间有什么区别?现在,我可以注意到,在第二种情况下,由于关键字的原因,myConst 将在程序的整个生命周期中存在。在第一种情况下,由于使用了堆,使用 myclass 执行的操作会更慢
在第一个示例中,myConst是一个非静态类成员常量。这意味着每个MyClass对象都将拥有自己的myConst副本。即使考虑到所有实例的常量值都相同的事实,它也会为每个实例占用单独的内存空间。
在第二个示例中,myConst被声明为static const int。事实证明,无论MyClass对象有多少,myConst都存在于单个副本中,并且是类的一部分,而不是单个对象。它是通过类名而不是通过对象来访问的,这对于其值对于该类的所有实例都是公共的常量来说很方便。这也减少了内存消耗,因为它不需要为类的每个实例分配单独的内存。
事实证明你的问题的答案是:
在第二个示例中,内存管理得到了更好的优化,性能也更高。