【发布时间】:2016-02-17 15:09:30
【问题描述】:
我遇到了这个奇怪的问题
我有一个本身就是 const 的方法:
void doSomething() const { x(); } 和 x 是一个非常量方法。
编译会导致discards qualifiers 错误。
假设我将doSomething 转换为int,并让x 返回一些虚拟整数,它变成:
int doSomething() const { return x(); }
编译正常吗?它确实在我的编译器上编译,这让我认为这可能是一个编译器错误。
编译器版本为:gcc (Debian 4.4.5-8) 4.4.5
class GgWp
{
public:
int doSomething const { return x(); }
int x()
{
num = 5;
return 0;
}
private:
int num;
}
如你所见,x 修改了变量num
【问题讨论】:
-
不,这应该给出相同的错误,但它不太可能是编译器错误。请提供一个完整的例子来说明问题。
-
上面编辑的代码 sn-p 不可能是你的实际代码,因为
doSomething缺少() -
x是否真的修改了任何东西都没有关系,标记为const的成员函数根本无法调用未标记为const的成员函数。 -
您的示例无法编译(在
doSomething之后缺少())。请提供mvce 并确保它确实可以编译。 -
ideone.com/B5uwIR 未编译并出现预期错误。为什么会编译?