1)如果我希望集合按降序存储元素,我可以写:
set<int, greater<int>> s;
Run Code Online (Sandbox Code Playgroud)
但我也可以
set<int, greater<>> s;
Run Code Online (Sandbox Code Playgroud)
编译器如何理解这一点?
2)为什么在下面的情况下
vector<int> a;
binary_search(a.begin(), a.end(), 5, greater<>());
Run Code Online (Sandbox Code Playgroud)
我必须写Greater<>(),而不是Greater<>。这有什么原因不能在任何地方都做同样的事情?
1)编译器如何理解这一点?
因为,由于C ++ 14,模板参数T的std::greater具有缺省值void; thenstd::greater<>与std::greater<void>.
标准库提供了一种特殊化的
std::greaterwhenT未指定,这使得参数类型和返回类型有待推导。
和
2)这有什么原因不能在所有地方都做同样的事情?
因为binary_search是一个函数并且期望它的参数是对象。greater<>(即greater<void>) 是一个类型,whilegreater<>()是一个对象(它是 上下文中的临时对象binary_search(a.begin(), a.end(), 5, greater<>());)。
顺便说一句:在 中set<int, greater<>> s;,您指定greater<>为模板参数。的第二个模板参数std::set是一个类型模板参数
,那么指定greater<>(这是一个类型)作为模板参数就可以了。
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |