gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:39:56 25 4
gpt4 key购买 nike

当二进制函数的参数应该是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com