C ++在const方法中返回非const方法

时间:2016-02-17 15:09:30

标签: c++11 const

我遇到了这个奇怪的问题

我有一个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

2 个答案:

答案 0 :(得分:3)

考虑这一行:

int doSomething() const { return x(); }

如果x()成员函数,那么它必须是const或者这不会在任何符合标准的主要编译器上编译。这与您是否实际返回x()的值或是否从doSomething()返回任何内容无关。您无法从const函数运行非const函数。

如果x()不是会员功能,那么这不适用。

答案 1 :(得分:1)

函数名后的const 引用对象(this) ,因此您无法从x()方法调用x(如果const不是const),并且返回类型应该没有区别。

无论如何编译,x()不是会员,而是const,或者 你的编译器出现故障。