为什么*(ptra + 0).prop无效而(*(ptra + 0)).prop有效?我知道点运算符的左边必须有一个结构。但我还是很困惑。有人能给我解释一下这两者之间的区别吗?
class myobj
{
public:
int v;
};
int main()
{
myobj *ptra = new myobj[2]();
*(ptra + 0).v = 12 //Error
(*(ptra + 0)).v = 12 ; //OK
return 0;
}发布于 2012-10-22 04:22:21
因为operator .有一个higher precedence,然后是operator *,所以
*(ptra + 0).v手段
*((ptr + 0).v)而不是
(*(ptra + 0)).v这里的*((ptr + 0).v)语法不正确,因为(ptr + 0)不是类或联合,所以没有任何成员。
发布于 2012-10-22 04:21:35
像这样的错误是由于运算符优先级造成的。在本例中,执行的第一个运算符是operator.,执行的第二个运算符是operator*。这就是为什么一行代码可以编译,而另一行代码不能编译,即使它们看起来非常相似。
若要覆盖此运算符的优先级,请使用括号,如
(1 + 2) * 3 = 9而不是
1 + 2 * 3 = 7.https://stackoverflow.com/questions/13001774
复制相似问题