gpt4 book ai didi

c++ - 指针类型的 STL 函数对象

转载 作者:太空宇宙 更新时间:2023-11-04 15:32:58 24 4
gpt4 key购买 nike

我读到“库保证指针类型上的 less(和其他函数对象)定义明确”。它来自 C++ Primer 第 5 版。例子是:

vector <string *> nameTable;
sort(nameTable.begin(), nameTable.end(), less<string *>());

但是当我尝试这样做时:

string *p1 = new string("abc");
string *p2 = new string("abc");
cout << equal_to<string *>()(p1, p2);

它返回 0,这意味着错误。为什么?

编辑:抱歉,我读错了这本书。它说:

vector<string *> nameTable;
sort(nameTable.begin(), nameTable.end(), [](string *a, string *b) { return a < b; }); // undefined
sort(nameTable.begin(), nameTable.end(), less<string*>()); // ok. however, meaningless

最佳答案

您的比较将比较指针,而不是它们指向的字符串。使用 < 比较指针或 >被指定为具体实现。使用 ==!=是指针上唯一定义明确的操作,但它仍然只比较指针。

std::less (以及 std::greater 等)模板 确实 具有明确指定的指针比较含义(通过专门化)。但他们仍然比较指针,而不是它们指向的内容。

简单的解决方案? 不要使用指针!

在现代 C++ 中,除了多态性之外,指针的用途很少。指向字符串的指针更少(如果有的话)用于。异常(exception)情况可能是 C++11 中的智能指针,但我建议您从所有权而不是自删除指针的角度来看待它们。

关于c++ - 指针类型的 STL 函数对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44626510/

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