代码之家  ›  专栏  ›  技术社区  ›  KeyC0de

这个语法STD::C++中的类< > {}(ARG1,ARG2)的意义是什么?

  •  1
  • KeyC0de  · 技术社区  · 7 年前

    我看到的例子:

    std::cout << std::plus<>{}(a, b) << '\n'; here .

    std::hash<T>{}(54879)

    还有其他人,我现在找不到。

    我知道 object{} object() object{val} object(val1,val2) 使用参数调用构造函数。以及 object<>{} object<T>() 显式指定对象的任何类型参数。但当所有这些都一起使用时,这意味着什么呢?我也找不到解释这个的文章或网页,或者我可能遗漏了什么。这是怎么一回事?

    1 回复  |  直到 7 年前
        1
  •  5
  •   alter_igel    7 年前

    您看到的是创建一个临时函子来调用它的函数调用操作符。 假设类具有函数调用运算符的重载:

    template<typename T>
    struct myclass {
        int operator()(int arg1, int arg2);
    };
    

    然后是片段 x = myclass<SomeType>{}(val1, val2); 执行以下操作:

    1. 它创建一个类型为的临时对象 myclass<SomeType> {}
    2. 然后它会呼叫 operator() 在那个临时物体上,在这种情况下 val1 val2 作为论据
    3. 整个表达式返回函数调用运算符的结果,临时表达式被销毁

    可以编写以下等效代码:

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

    例如,如果要使用 std::hash 但我不想看到 活很长时间。