首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >*(ptra + 0).prop和(*(ptra + 0)).prop的有效性

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

Stack Overflow用户
提问于 2012-10-22 04:17:22
回答 2查看 50关注 0票数 0

为什么*(ptra + 0).prop无效而(*(ptra + 0)).prop有效?我知道点运算符的左边必须有一个结构。但我还是很困惑。有人能给我解释一下这两者之间的区别吗?

代码语言:javascript
复制
class myobj 
{
public:
    int v;
};

int main()
{

    myobj *ptra = new myobj[2]();

    *(ptra + 0).v = 12 //Error

    (*(ptra + 0)).v = 12 ; //OK

    return 0;

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-22 04:22:21

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

代码语言:javascript
复制
*(ptra + 0).v

手段

代码语言:javascript
复制
*((ptr + 0).v)

而不是

代码语言:javascript
复制
(*(ptra + 0)).v

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

票数 3
EN

Stack Overflow用户

发布于 2012-10-22 04:21:35

像这样的错误是由于运算符优先级造成的。在本例中,执行的第一个运算符是operator.,执行的第二个运算符是operator*。这就是为什么一行代码可以编译,而另一行代码不能编译,即使它们看起来非常相似。

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

代码语言:javascript
复制
(1 + 2) * 3 = 9

而不是

代码语言:javascript
复制
1 + 2 * 3 = 7.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13001774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档