我看到过的例子:
std::cout << std::plus<>{}(a, b) << '\n';
在这里的问题。
std::hash<T>{}(54879)
和其他人,我现在找不到它们。
我知道object{}
或object()
调用默认的ctor,object{val}
或object(val1,val2)
调用带参数的构造函数。和object<>{}
或object<T>()
显式指定对象的任何类型参数。但是,当所有这些一起使用时,这意味着什么呢?我也找不到说明此问题的文章或网页,否则我可能会遗漏某些东西。它是什么?
您所看到的是创建一个临时函子,仅用于调用其函数调用运算符。假设该类具有函数调用运算符的重载:
template<typename T>
struct myclass {
int operator()(int arg1, int arg2);
};
然后,该代码段x = myclass<SomeType>{}(val1, val2);
执行以下操作:
myclass<SomeType>
由于统一的初始化器,它通过调用默认的构造器创建一个类型的临时对象{}
。operator()
该临时对象,在这种情况下,提供val1
并val2
作为参数相反,可以编写以下等效代码:
{
auto obj = myclass<SomeType>{}; // initialize object
x = obj(val1, val2); // invoke operator()
}
例如,如果要使用计算对象的哈希值,std::hash
但又不想让它的实例std::hash
存在很长时间,则此功能很有用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句