()运算符在左侧c ++上重载

时间:2015-01-02 12:20:32

标签: c++

我有一个带有重载()运算符的类:

class Animal
{
public:
    string sound;
    Animal (string a): sound(a) {}

void operator()()
  {
    cout<<sound<<endl;
  }
};

int main()
{
    Animal dog("hau hau");
    dog();
} 

但是,有可能我可以在左侧用()获得相同的结果吗?

()dog;

我知道我可能永远不会需要这个,但我只是好奇,如果可能的话

4 个答案:

答案 0 :(得分:2)

不,因为在()之前必须有一个主表达式。

还记得编译器会向后读这个,所以他不会知道这应该是一个函数。

答案 1 :(得分:2)

不,你不能这样做:C ++中没有类似这样的构造的语法。

重载operator ()背后的目的是让类的对象参与函数调用表达式,其中对象表示被调用的函数。 C ++没有调用函数的语法,或者其中括号在主表达式之前(在您的情况下是标识符),因此您的问题的答案是&#34; no&#34;。

答案 2 :(得分:1)

即可。这是不可能的。不是一个理智,安全,标准的符合方式。

答案 3 :(得分:1)

    左侧的
  1. ()仅用于投射
  2. #YAGNI