c++ - 返回 `const bool` 会导致警告 C4180

标签 c++

<分区>

struct CCompare
{
    const bool operator()(const int& lhs, const int& rhs) const {
        return lhs < rhs;
    }
};

Warning 1 warning C4180: qualifier applied to function type has no meaning;

我在一本编程书上看到返回值为const bool的用法。我用vs2010编译上面的代码,报C4180警告。

下面的代码不会引起同样的警告。

struct CCompare
{
    bool operator()(const int& lhs, const int& rhs) const {
        return lhs < rhs;
    }
};

问题 1> const Fundamental_Data_Types 作为函数返回值的用法真的没有意义吗?

问题 2> 如果 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
}

最佳答案

对你的两个问题都是肯定的。返回值为 右值和 cv 限定符仅适用于具有以下条件的右值 类类型。

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

关于c++ - 返回 `const bool` 会导致警告 C4180,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17529196/

相关文章:

c++ - 对使用 C++ 的快速 GUI 开发工具的建议?

c++ - 我可以对宏使用哪些技巧?

c++ - 如何通过 Valgrind 或其他工具检测我的 Qt 软件中的内存泄漏?

c++ - node.js 网络服务器和 C++ 游戏服务器

c++ - 检查两个 glutSolidCube 对象之间的碰撞

c++ - 创建全局变量导致链接器错误

c++ - std::vector::resize(size_type) 需要 CopyInsertable?

c++调用模板类的特定模板构造函数

c++ - mavericks osx 10.9 上的 VTK 编译错误

c++ - 模板 <class T> 的特化 模板 <class T> 的定义