问问题
314 次
1 回答
46
这是一种强制转换语法。
原因是强制转换和一元加减乘法(取消引用运算符)比它们的二元对应物具有更高的优先级。由于此处的空格无关紧要,因此也可以将其解读为:
A a = (A()) +A();
强制转换 和unary+
比二进制具有更高的优先级,operator+
因此表达式采用前一种含义。
您可能想知道(就像我一样)当里面的东西不是类型时如何进行转换。输入最令人烦恼的解析!,这意味着我试图将一个类型的对象+A()
转换为一个接受 0 个参数并返回一个类型的对象的函数A
。
作为记录,语法:
A a = ((A())) + A();
给出你想要的,因为双括号不能是强制转换,我们回到解析二进制operator+
表达式。
这也解释了为什么除法运算符而不是加法不会出现问题,它没有一元对应物。
于 2013-05-20T03:53:19.007 回答