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;
}