0

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

}
4

2 回答 2

3

因为thenoperator .具有更高的优先级operator *,所以

*(ptra + 0).v

方法

*((ptr + 0).v)

并不是

(*(ptra + 0)).v

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

于 2012-10-21T20:22:21.120 回答
0

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

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

(1 + 2) * 3 = 9

1 + 2 * 3 = 7.
于 2012-10-21T20:21:35.223 回答