C++11 C++;在常量方法中返回非常量方法

C++11 C++;在常量方法中返回非常量方法,c++11,constants,C++11,Constants,我遇到了这个奇怪的问题 我有一个方法本身就是常量: void doSomething()const{x();}并且x是一个非const方法。 编译将导致丢弃限定符错误 假设我将doSomething转换为int,并使x返回一些虚拟int,它将转换为: int doSomething()常量{return x();} 它会编译是正常的吗?它确实在我的编译器上编译,这让我觉得这可能是一个编译器错误 编译器版本为:gcc(Debian 4.4.5-8)4.4.5 如您所见,x修改变量num函数名引用

我遇到了这个奇怪的问题

我有一个方法本身就是常量:

void doSomething()const{x();}
并且x是一个非const方法。
编译将导致
丢弃限定符
错误

假设我将
doSomething
转换为
int
,并使
x
返回一些虚拟int,它将转换为:

int doSomething()常量{return x();}

它会编译是正常的吗?它确实在我的编译器上编译,这让我觉得这可能是一个编译器错误

编译器版本为:
gcc(Debian 4.4.5-8)4.4.5


如您所见,
x
修改变量
num
函数名引用对象后的
const
this
) ,因此您应该不能从
const
方法调用
x()
(如果
x
不是
const
),返回类型应该没有区别

如果仍要编译,则
x()
不是成员,而是
const
,或者 您的编译器出现故障。

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

如果仍要编译,则
x()
不是成员,而是
const
,或者 您的编译器出现故障。

请考虑这一行:

int doSomething()常量{return x();}

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

如果
x()
不是成员函数,则这不适用。

考虑这一行:

int doSomething()常量{return x();}

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


如果
x()
不是成员函数,则这不适用。

否,这将给出相同的错误,但不太可能是编译器错误。请提供一个完整的示例来说明问题。上面编辑的代码片段不可能是您的实际代码,因为
doSomething
缺少
()
无论
x
是否实际修改了任何内容,标记为
const
的成员函数无法调用未标记为
const
的成员函数。您的示例未编译(在
doSomething
之后缺少
()
)。请提供并确保它确实编译。未使用预期错误编译。它为什么要编译?不,这应该会产生相同的错误,但它不太可能是编译器错误。请提供一个完整的示例来说明问题。上面编辑的代码片段不可能是您的实际代码,因为
doSomething
缺少
()
无论
x
是否实际修改了任何内容,标记为
const
的成员函数无法调用未标记为
const
的成员函数。您的示例未编译(在
doSomething
之后缺少
()
)。请提供并确保它确实编译。未使用预期错误编译。为什么要编译?是的。这就是我的答案。我提供的代码确实没有编译完成。这就是我的答案。我提供的代码确实没有编译
class GgWp
{
public:
    int doSomething const { return x(); }
    int x()
    {
        num = 5;
        return 0;
    }
private:
    int num;
}