【问题标题】:what is () operator called in c++?什么是 C++ 中调用的 () 运算符?
【发布时间】:2016-03-12 21:10:05
【问题描述】:
class functor;

functor();

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

我尝试在谷歌上搜索,但结果中没有“()”,即使有引号。

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

【问题讨论】:

  • 这不是一个操作符,它是一个构造函数。
  • 我想你的意思是 functor foo; 然后“foo() 叫什么?”
  • @M.M 是的,我是这个意思
  • 也许您应该更新标题以指定您正在寻找T()中的()名称

标签: c++ functor


【解决方案1】:

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

【讨论】:

  • 所谓的,在类之后使用,并且类没有重载()操作符。
  • 在这种情况下,您在类名后面写的那行只是函数声明。 () 运算符仍然保持不变,但是当您希望重载此函数时它会派上用场,在这种情况下,如果您在 () 运算符中传递一些参数,它将重载给定函数。因此 () 运算符保持不变(但是它的一个功能是帮助重载函数,但它仍然是 CALL 运算符,其中包含函数的参数)
  • 不,不是。它在使用时创建类的对象,带有一个类
  • 请注意,您使用的代码使用了构造函数,即functor(); 现在重要的是要记住构造函数也是成员函数,它们与其他成员函数的唯一不同之处在于它们具有相同的name 作为类并且没有返回类型,并执行初始化数据成员的特定任务。但事实仍然是它们也是函数,因此 () 仍然是 CALL 运算符 并且它的含义不会改变,因为它与构造函数一起使用,而构造函数只是另一种类型的成员函数,因为它仍然是功能
  • 抱歉回复晚了,不得不做一些研究才能回答这个问题,不过问题很好,希望您对答案感到满意
【解决方案2】:

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

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

请参阅 C++ 11 标准的第 8.5 节“初始化程序”。

【讨论】:

  • 即使在课后使用,并且该类没有重载()操作符?它在使用时创建类的对象,带有一个类。
  • 哦,对不起,我似乎没有正确理解你的问题。如果您选择了另一个名称(不是“函子”),我可能会理解。无论如何,在调用构造函数时,我根本不确定“()”是否称为运算符。类名后面的括号简称为“初始化程序”(在您的示例中为空初始化程序)。
  • 好的,但是初始化器(在基类初始化中使用)不返回任何东西。但是,在这种情况下,它返回的是同一类的对象。
【解决方案3】:

【讨论】:

    【解决方案4】:

    在您的示例中,functor 是一种类型,与对象相反,表达式 functor() 在功能表示法中称为显式类型转换。创建了一个functor 类型的临时对象。新操作员不以任何方式参与。显式类型转换表达式的准确语法是simple-type-specifier ( expression-list-opt )typename-specifier ( expression-list-opt )。请注意,我使用了与 subscrit opt 相对的后缀 -opt,因为标准是这样做的。请参阅 C++14 标准中的 5.2.3 显式类型转换(函数表示法)[expr.type.conv],或在此处查看cppreference

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

    【讨论】:

      猜你喜欢
      • 2010-12-11
      • 2010-12-19
      • 2014-10-19
      相关资源
      最近更新 更多