`const bool`的返回导致警告C4180

时间:2013-07-08 14:28:03

标签: c++

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
}

1 个答案:

答案 0 :(得分:7)

是的,对你的两个问题都是肯定的。返回值是 rvalues和cv-qualifiers仅适用于rvalues(如果有) 一个班级类型。

原因很简单:通常没什么 你可以使用const-ness所做的rvalue 差异 - 它毕竟是一个值,而不是一个对象。 对于类类型,有成员函数可以使用 帐户(这意味着您可以从中获得左值 rvalue),所以const-ness突然变得相关。