c++ - 关于c++中二元函数的参数

标签 c++ pointers reference constants

当二进制函数的参数应该是 const T &T & 时,我感到很困惑。

谁能告诉我为什么 sort(vec2.begin(), vec2.end(),cmp1());//error, why? 是错误的,而 sort(vec1 .begin(), vec1.end(),cmp2());//对是对的吗?

它们都有 const T & 参数。

谢谢!

struct Node{
    Node(char ch, int num):ch_(ch), num_(num){ pnext_ = nullptr, pprev_ = nullptr; }
    char ch_;
    int num_;
    Node *pnext_;
    Node *pprev_;
    // bool operator < (const Node &no) const { return num_ > no.num_; }//最小值优先
    // bool operator > (const Node &no) const { return num_ < no.num_; }//最大值优先
};
struct cmp0{
    bool operator () (Node * &p1, Node * &p2) const
    {
        return p1->num_ > p2->num_;
    }
};
struct cmp1{
    bool operator ()(const Node * &p1, const Node * &p2) const
    {
        return p1->num_ > p2->num_;
    }
};
struct cmp2{
    bool operator ()(const Node &p1, const Node &p2) const
    {
        return p1.num_ > p2.num_;
    }
};
struct cmp3{
    bool operator ()(Node &p1, Node &p2) const
    {
        return p1.num_ > p2.num_;
    }
};
int main(int argc, char *argv[])
{
    vector<Node> vec1;
    vector<Node*> vec2;
    sort(vec1.begin(), vec1.end(),cmp2());//correct
    sort(vec1.begin(), vec1.end(), cmp3());//correct
    sort(vec2.begin(), vec2.end(), cmp0());//correct
    sort(vec2.begin(), vec2.end(),cmp1());//error, why?
}

最佳答案

They all have const T & arguments.

这可能会令人困惑,但是对于 cmp1 而言,参数类型(即 const Node *&)不是 const T&(与 T==Node*),应该是Node* const&。请注意常量指针 (Node* const) 和指向常量的指针 (const Node*) 之间的区别。

sort(vec2.begin(), vec2.end(),cmp1());//error, why?

元素类型为Node*,无法绑定(bind)到const Node* &。因为Node*const Node*不是同一种类型,所以需要转为const Node*,这将是一个临时的和不能绑定(bind)到对非常量的左值引用。

关于c++ - 关于c++中二元函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38449171/

相关文章:

multithreading - 如何将对堆栈变量的引用传递给线程?

c++ - 需要帮助理解指针算法

c++ - 尽管签名匹配示例和源代码,但 vulkan 图形管道的参数错误

c - *ptr[10] 和 (*ptr)[10] 的区别

c++ - 在 C++ 中将数组作为指针传递和分配的后果是什么?

php - 如何使用 HTML 链接将变量从一个 PHP 文件传递​​到另一个文件?

c - 在 C 中通过引用传递数组

c++ - 寻找,相对或绝对位置?

c++ - 动态规划、遍历法

c - 在 C 的另一个结构中初始化和访问嵌套的 struct char 指针