class functor;
functor();
什么是()
运营商?它是否使用new运算符创建对象?
我尝试在谷歌搜索,但"()"结果中没有,即使是引号也没有。
编辑:()
通常与仿函数一起使用,但它可以用于没有重载运算符()
的类。它创建了类的对象。
答案 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)