C ++中此语法std :: class <> {}(arg1,arg2)的含义是什么?

尼科斯

我看到过的例子:

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);执行以下操作:

  1. myclass<SomeType>由于统一的初始化器,通过调用默认的构造器创建一个类型的临时对象{}
  2. 然后调用operator()该临时对象,在这种情况下,提供val1val2作为参数
  3. 整个表达式返回函数调用运算符的结果,并且临时变量被销毁

相反,可以编写以下等效代码:

{
    auto obj = myclass<SomeType>{}; // initialize object
    x = obj(val1, val2); // invoke operator()
}

例如,如果要使用计算对象的哈希值,std::hash但又不想让它的实例std::hash存在很长时间,则此功能很有用

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

bash -c mycommand arg1 arg2中的参数

max 函数中的键的指导原则是什么?该键是否与 Python 中的字典键相关?例如: max(arg1, arg2, *args[, key])

为什么不能使用语法&name arg1 arg2 ...来调用Perl子例程?

C# 将带有标志 (/arg1 /arg2) 的参数传递给 exe

将Json引用为$ arg bash,有效负载中带有变量(arg1 arg2未传递变量)

C ++中“ Class <>”的含义是什么?

C#-LINQ to EF中此查询的语法是什么?

JavaScript functionCall(arg1)(arg2)

如果应满足(arg1> arg2),应抛出什么异常?

哪些参数传递给AsyncTask <arg1,arg2,arg3>?

C ++中此星号(*)的含义是什么?-指向成员的指针

在C qsort中此代码的含义是什么?

C#(类似于多个元组的赋值)中此语法的名称是什么?

C ++中struct / class的历史是什么?

(<任何>窗口).SomeLibrary.SomeMethod(arg1,arg2)?

在Scala中func(arg:(type1,type2)=> Future [Any])是什么意思?

“ foo(... arg)”(函数调用中的三个点)的含义是什么?

C中y = x ++ <= 2的含义是什么?

为什么class :: class :: class :: staticClassMember()编译(在C ++中)?

C ++中的class a()和class a = class()有什么区别?

CMake 中 ${${arg}} 的含义?

W3C 提供的 XMLHttpRequest 中 Level 2 和 Level 1 的含义/区别是什么

有人可以解释 call_user_func_array(array(arg1, arg2), []) 是如何工作的吗?

arg在WordPress中是什么意思

Dockerfile 中的 ARG 和 LABEL 是什么

C ++中void * volatile *的含义是什么

C#中〜的含义是什么

在C#中,“ where T:class”是什么?意思

在C ++中,“ class classname * funcname(void)”是什么意思?