【发布时间】:2013-04-18 20:57:19
【问题描述】:
我正在学习 C++,我读到:如果数据成员被声明为可变,那么从 const 成员函数为该数据成员赋值是合法的。强> 但是以下代码编译时没有任何错误或 gcc 警告。 (不是真实世界的代码示例,我只是为了测试 mutable 关键字而写的)
class M
{
public:
M(){x=10;};
int getX() {x++; return x;};
private:
mutable int x;
};
int main()
{
M xx;
std::cout << xx.getX() << std::endl;
}
我不应该将 getX 声明为 const 吗?
编辑1(ForEver的回答让事情更清楚了),下面的代码将不会被编译:
class M
{
public:
M(){x=10;};
int getX() const {x++; return x;};
private:
int x;
};
int main()
{
M xx;
std::cout << xx.getX() << std::endl;
}
【问题讨论】:
-
该语句并没有说成员函数必须是 const。建议先学习了解
const再学习mutable。 -
通常情况下,在 const 函数中允许的任何内容也可以在非常量函数中使用。 const 函数比非 const 函数更具限制性。
-
我无意冒犯,但您如何评价您的英语理解能力?这里的问题似乎是你对那句话的意思有一个基本的误解。
-
你说得对,我的英语理解是个问题,但问起来很糟糕吗?无论如何。
-
不,问没问题。我只是好奇。