Nik*_*kos 2 c++ constructor object std type-parameter
我看到过的例子:
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);
};
Run Code Online (Sandbox Code Playgroud)
然后,该代码段x = myclass<SomeType>{}(val1, val2);执行以下操作:
myclass<SomeType>由于统一的初始化器,它通过调用默认的构造器来创建一个类型的临时对象{}。operator(),它调用该临时对象,在这种情况下,提供val1并val2作为参数相反,可以编写以下等效代码:
{
auto obj = myclass<SomeType>{}; // initialize object
x = obj(val1, val2); // invoke operator()
}
Run Code Online (Sandbox Code Playgroud)
例如,如果您要使用计算对象的哈希值,std::hash但又不想让它的实例std::hash存在很长时间,则此功能很有用。