[问题] 为什么类别不需建立物件就可使用

楼主: zero064 (zero064)   2014-12-29 14:36:01
// comparator predicate: returns true if a < b, false otherwise
struct IntComparator
{
bool operator()(const int &a, const int &b) const
{
return a < b;
}
};
...
// An overload of std::sort is:
template <class RandomIt, class Compare>
void sort(RandomIt first, RandomIt last, Compare comp);
...
int main()
{
std::vector<int> items { 4, 3, 1, 2 };
std::sort(items.begin(), items.end(), IntComparator());
return 0;
}
sort的第三个引数,应该是一个Compare 类别的物件,但是在main里面,
却直接用IntComparator()当作引数,请问一下这是怎么回事,应该用什么关键字来查询?
作者: LiloHuang (十年一刻)   2014-12-29 14:56:00
class type functor http://goo.gl/XBXdTxIntComparator() 会生出一个 callable object进而让 sort 的实作去呼叫这个 callable object至于那个 Compare 并不是真的有一个 class 叫 Compare那是 class template 带进来的 class 型别名称因此命名 IntComparator 或者 FoobarComparator 都可
作者: holydc (のヮの)   2014-12-29 17:12:00
IntComparator()就是建立一个无名的IntComparator物件呀
作者: Killercat (杀人猫™)   2014-12-29 18:07:00
这是典型的C++语法限制,逼你非得做一个物件出来不可里面的operator无法宣告static 即使他本质就是static
作者: azureblaze (AzureBlaze)   2014-12-29 18:21:00
实务上应该会被最佳化掉就是了
作者: OPIV (Monitor)   2014-12-30 22:57:00
建立新物件是用来初始化类别(就是constructor 做的事) 不初始化 某些情况下依然可以使用
作者: longlongint (华哥尔)   2014-12-31 01:16:00
你有建立物件

Links booklink

Contact Us: admin [ a t ] ucptt.com