我有一个带有重载()运算符的类:
class Animal
{
public:
string sound;
Animal (string a): sound(a) {}
void operator()()
{
cout<<sound<<endl;
}
};
int main()
{
Animal dog("hau hau");
dog();
}
但是,有可能我可以在左侧用()获得相同的结果吗?
()dog;
我知道我可能永远不会需要这个,但我只是好奇,如果可能的话
答案 0 :(得分:2)
不,因为在()
之前必须有一个主表达式。
还记得编译器会向后读这个,所以他不会知道这应该是一个函数。
答案 1 :(得分:2)
不,你不能这样做:C ++中没有类似这样的构造的语法。
重载operator ()
背后的目的是让类的对象参与函数调用表达式,其中对象表示被调用的函数。 C ++没有调用函数的语法,或者其中括号在主表达式之前(在您的情况下是标识符),因此您的问题的答案是&#34; no&#34;。
答案 2 :(得分:1)
否即可。这是不可能的。不是一个理智,安全,标准的符合方式。
答案 3 :(得分:1)
()
仅用于投射