32
4

1 回答 1

46

这是一种强制转换语法。

原因是强制转换和一元加减乘法(取消引用运算符)比它们的二元对应物具有更高的优先级。由于此处的空格无关紧要,因此也可以将其解读为:

    A a = (A()) +A();

强制转换 和unary+比二进制具有更高的优先级,operator+因此表达式采用前一种含义。

您可能想知道(就像我一样)当里面的东西不是类型时如何进行转换。输入最令人烦恼的解析!,这意味着我试图将一个类型的对象+A()转换为一个接受 0 个参数并返回一个类型的对象的函数A

作为记录,语法:

    A a = ((A())) + A();

给出你想要的,因为双括号不能是强制转换,我们回到解析二进制operator+表达式。

这也解释了为什么除法运算符而不是加法不会出现问题,它没有一元对应物。

于 2013-05-20T03:53:19.007 回答