什么是在c ++中调用的()运算符?

时间:2015-12-08 03:39:34

标签: c++ functor

class functor;

functor();

什么是()运营商?它是否使用new运算符创建对象?

我尝试在谷歌搜索,但"()"结果中没有,即使是引号也没有。

编辑:()通常与仿函数一起使用,但它可以用于没有重载运算符()的类。它创建了类的对象。

4 个答案:

答案 0 :(得分:4)

它被称为 CALL运算符,它是在函数调用期间写入函数的名称之后的。函数的参数在此运算符中传递(如果有的话)。

答案 1 :(得分:3)

当与对象一起使用时,它通常被称为"函数调用运算符",它调用"运算符()"那个对象。或者,如果对象是普通函数,引用函数或指向函数的指针,它只是调用该函数。

如果与类型名一起使用,语法T()将调用该类型的默认构造函数,从而创建该类型的未命名对象。该构造中的()简称为"初始化程序"。

见8.5和#34;初始化者" C ++ 11标准。

答案 2 :(得分:1)

在您的示例中,functor是一种类型,与对象相对,表达式functor()在函数表示法中称为显式类型转换。创建了functor类型的临时对象。新运营商不以任何方式参与。显式类型转换表达式的确切语法是simple-type-specifier ( expression-list-opt )typename-specifier ( expression-list-opt )。请注意,我使用与subscribt opt相反的后缀-opt作为标准。请参阅C ++ 14标准中的5.2.3显式类型转换(功能表示法)[expr.type.conv],或cppreference上的。{/ p>

如果(的左侧是表达式,如functor f; f(),表达式f()是函数调用。确切的语法是postfix-expression ( expression-list-opt )。请参阅C ++ 14标准中的5.2.2函数调用[expr.call],或cppereference上的函数调用[expr.call]。在这里,您可以说使用了函数调用运算符。 f的类型(此处为functor)必须重载函数调用运算符,例如,章节'函数调用运算符'这里是cpprefrence。您可能还想阅读cppreference上的页面Function objects

答案 3 :(得分:0)

相关问题