我遇到了这个奇怪的问题
我有一个const本身的方法:
void doSomething() const { x(); }
和x是非const方法
编译会导致discards qualifiers
错误。
说我将doSomething
转为int
,并使x
返回一些虚拟int,然后变为:
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
答案 0 :(得分:3)
考虑这一行:
int doSomething() const { return x(); }
如果x()
是成员函数,那么它必须是const
或者这不会在任何符合标准的主要编译器上编译。这与您是否实际返回x()
的值或是否从doSomething()
返回任何内容无关。您无法从const函数运行非const函数。
如果x()
不是会员功能,那么这不适用。
答案 1 :(得分:1)
函数名后的const
引用对象(this
)
,因此您无法从x()
方法调用x
(如果const
不是const
),并且返回类型应该没有区别。
无论如何编译,x()
不是会员,而是const
,或者
你的编译器出现故障。