[問題] 為什麼類別不需建立物件就可使用

作者: 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