*(ptra + 0).prop和(*(ptra + 0))。prop的有效性

时间:2012-10-21 20:17:22

标签: c++

为什么*(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;

}

2 个答案:

答案 0 :(得分:3)

因为operator .有一个higher precedence然后operator *,所以

*(ptra + 0).v

装置

*((ptr + 0).v)

而不是

(*(ptra + 0)).v

*((ptr + 0).v)这里的语法不正确,因为(ptr + 0)不是类或联合,所以没有任何成员。

答案 1 :(得分:0)

像这样的错误是由运算符优先级引起的。在这种情况下,执行的第一个运算符是operator.,而第二个执行的运算符是operator*。这就是为什么一行编译而另一行不编译,即使它们看起来非常相似。

要覆盖此运算符优先级,请使用括号,如

(1 + 2) * 3 = 9

而不是

1 + 2 * 3 = 7.