C++ 在c++;?

C++ 在c++;?,c++,functor,C++,Functor,什么是()操作符?它是否使用新操作符创建对象 我试着在谷歌上搜索,但结果中没有“()”,甚至连引号都没有 编辑:()通常与functor一起使用,但它可以与未重载运算符的类一起使用()。它创建类的对象。它被称为调用操作符它在函数调用期间写在函数名之后。函数的参数在此运算符(如果有)中传递。与对象一起使用时,通常称为“函数调用运算符”,它调用该对象的“运算符()”。或者,如果对象是普通函数、函数引用或函数指针,它只调用该函数 如果与类型名一起使用,语法T()将调用该类型的默认构造函数,创建该类型的

什么是
()
操作符?它是否使用新操作符创建对象

我试着在谷歌上搜索,但结果中没有“()”,甚至连引号都没有


编辑:
()
通常与functor一起使用,但它可以与未重载运算符的类一起使用
()
。它创建类的对象。

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

与对象一起使用时,通常称为“函数调用运算符”,它调用该对象的“运算符()”。或者,如果对象是普通函数、函数引用或函数指针,它只调用该函数

如果与类型名一起使用,语法
T()
将调用该类型的默认构造函数,创建该类型的未命名对象。该构造中的
()
被简单地称为“初始值设定项”


参见C++ 11标准的8.5个“初始化器”。< /P> < p>其函数调用运算符重载。< /P>

相关文章


在您的示例中,
functor
是一种类型,与对象相对,表达式
functor()
在函数表示法中称为显式类型转换。将创建类型为
functor
的临时对象。新的操作员没有以任何方式参与。显式类型转换表达式的确切语法是
简单类型说明符(表达式列表opt)
类型名称说明符(表达式列表opt)
。注意,我使用的后缀-opt与subscribt opt相反,因为标准是这样做的。请参见C++14标准中的5.2.3显式类型转换(函数表示法)[expr.type.conv]或此处


如果
的左侧是一个表达式,如在
函子f;f()
中,表达式
f()
是一个函数调用。确切的语法是
后缀表达式(表达式列表选项)
。请参阅5.2.2函数调用[expr.call]在C++14标准中,或者在这里。这里您可以说使用了函数调用运算符。
f
,这里的
functor
,必须重载函数调用运算符,请参见下面的“函数调用运算符”一章。您可能还需要阅读cppreference上的页面。

这不是运算符,而是构造函数。I你的意思是
函子foo;
然后是“调用了什么
foo()
?@M.M是的,我的意思是,也许你应该更新标题,指定你在
T()
中查找()的名称,当在类之后使用时,它被称为什么,并且类没有重载
()
operator。在这种情况下,您在类名后写的那一行只是函数声明。()运算符仍然保持不变,但是当您希望重载此函数时,它会派上用场,在这种情况下,如果您在()运算符中传递一些参数,它将重载给定函数。因此()运算符保持不变(但是它的一个功能有助于重载函数,但它仍然是调用运算符,其中包含函数的参数)。不,它不是。它在使用时创建类的对象,并带有类注意,您使用的代码使用构造函数,即
functor()
现在,重要的是要记住构造函数也是成员函数,它们与其他成员函数的唯一区别在于它们与类具有相同的名称,没有返回类型,并执行初始化数据成员的特定任务。但事实上,它们也是函数,因此()仍然是一个调用运算符,其含义不会改变,因为它与构造函数一起使用,而构造函数只是另一种类型的成员函数,因为它仍然是一个函数。很抱歉,迟来的答复不得不做一些研究来回答这一问题,尽管这是个好问题,希望您对答案感到满意,即使在课后使用,但该类没有重载的
()
运算符?它在使用时创建类的对象,带有类。哦,对不起,似乎我没有正确理解你的问题。如果你选择了另一个名称(不是“functor”),我可能会理解。无论如何,在调用构造函数时,我不确定“()”是否完全称为运算符。类名后面的括号仅称为“初始值设定项”(在您的示例中为空初始值设定项)。好的,但初始值设定项(在基类初始化中使用)不返回任何内容。但是,在本例中,它返回同一类的对象。
class functor;

functor();