【发布时间】:2017-10-11 16:41:08
【问题描述】:
在以下C++ 程序中,从const 函数修改静态数据成员 工作正常:
class A
{
public:
static int a; // static data member
void set() const
{
a = 10;
}
};
但是从const 函数修改非静态数据成员不起作用:
class A
{
public:
int a; // non-static data member
void set() const
{
a = 10;
}
};
为什么const 成员函数可以修改static 数据成员?
【问题讨论】:
-
如果您能告诉我们您正在使用哪个平台和编译器会很有帮助?因此,我们可以确定该行为是否是与您的特定设置相关的错误,或者该行为是否确实正确并且只需要解释。
-
@AlexZywicki G++ 编译器在 Linux 平台上。
-
不需要。这是有意的,所有 C++ 编译器都必须支持它。但是为什么像这样的好问题不再被赞成了呢?
-
这是一个骗子,但由于更好的 MCVE,它比另一个写得更好,所以我用它作为目标。
-
这里的动机是
const意味着一个对象的成员函数不能修改那个对象。它可以修改同一类的其他对象,或与该类关联的static数据,而不是它的任何特定实例。 (或mutable数据成员,它们被创建为该规则的例外。)
标签: c++ function c++11 static constants