【发布时间】:2020-05-23 10:13:46
【问题描述】:
我想知道临时对象(name_compare()) 是按值传递还是通过引用 std::sort 传递。
如果您能提供有关此问题的任何提示,我将不胜感激。
struct Record {
string name;
// ...
};
struct name_compare { // compare Records using "name" as the key
bool operator()(const Record& a, const Record& b) const
{ return a.name<b.name; }
};
void f(vector<Record>& vs)
{
sort(vs.begin(), vs.end(), name_compare());
// ...
}
【问题讨论】:
-
你需要看看
std::sort是如何声明的。它声明参数是值还是引用? -
请告诉我们为什么你想知道?是否有一个潜在的问题让你问这个问题?根本问题是什么?请始终直接询问这些问题。
-
std::sort()的版本,它接受三个参数,由一对指定范围的迭代器和一个比较器按值接受所有三个参数。 -
要通过引用传递你必须有一个声明的对象,这里
name_compare()没有声明,因此它将被移动并按值获取。 -
我有一个问题要问你。你为什么不接受弗拉德对你刚刚提出的问题的回答?我看到它回答了你的最后一个问题。虽然不接受,但如何等待答复?
标签: c++ c++11 c++17 function-object