struct CCompare
{
const bool operator()(const int& lhs, const int& rhs) const {
return lhs < rhs;
}
};
警告1警告C4180:应用于功能类型的限定符没有 意;
我在编程手册中看到了返回值为const bool
的用法。当我用vs2010编译上面的代码时,它会报告警告C4180。
以下代码不会导致相同的警告。
struct CCompare
{
bool operator()(const int& lhs, const int& rhs) const {
return lhs < rhs;
}
};
问题1 &GT;使用const Fundamental_Data_Types
作为函数返回值是没有意义的吗?
问题2 &GT;如果Type是类/结构,那么const Type
作为函数返回值的使用是否正确?
谢谢
//更新//
struct CClass
{
int val;
CClass(int _val) : val(_val) {}
void SetValue(int _val) {
val = _val;
}
};
struct CCompare
{
const CClass getMe() const {
return CClass(10);
}
CClass getMeB() const {
return CClass(10);
}
};
int main(/*int argc, char *argv[]*/)
{
CCompare c;
c.getMe().SetValue(20); // error
c.getMeB().SetValue(20); // ok
}
答案 0 :(得分:7)
是的,对你的两个问题都是肯定的。返回值是 rvalues和cv-qualifiers仅适用于rvalues(如果有) 一个班级类型。
原因很简单:通常没什么 你可以使用const-ness所做的rvalue 差异 - 它毕竟是一个值,而不是一个对象。 对于类类型,有成员函数可以使用 帐户(这意味着您可以从中获得左值 rvalue),所以const-ness突然变得相关。