我看到过的例子:
std::cout << std::plus<>{}(a, b) << '\n';
在问题here中。
std::hash<T>{}(54879)
还有其他人,我现在找不到它们。
我知道object{}
或object()
调用默认的ctor,而object{val}
或object(val1,val2)
调用带有参数的构造函数。 object<>{}
或object<T>()
明确指定对象的任何类型参数。但是,当所有这些一起使用时,这意味着什么呢?我也找不到说明此问题的文章或网页,否则我可能会遗漏某些东西。什么事?
答案 0 :(得分:5)
您看到的是创建一个临时函子,仅用于调用其函数调用运算符。 假设该类具有函数调用运算符的重载:
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
的实例存在很长时间,则这很有用。