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

}

最佳答案

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

*(ptra + 0).v


手段

*((ptr + 0).v)


并不是

(*(ptra + 0)).v


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

关于c++ - *(ptra + 0).prop和(*(ptra + 0))。prop的有效性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13001774/

10-10 23:19