C++运算符"&"和"->"的优先级

3
给定以下内容:
&row->count

在C++中,是会评估&(row->count)还是(&row)->count?

编辑:这里有一个关于C++优先级的链接


为什么不试一下,看看会发生什么呢? - JesperE
2
我认为还没有类似的问题被问过,这将是一个很好的问题可以添加到stackoverflow。 - stung
7个回答

18

在优先级规则方面,我一直喜欢Steve Oualline在"Practical C"中提出的规则:

C语言中有15种优先级法则(&& 在 || 之前,在?:之前)。实际的程序员将这些规则简化为两个:

1)乘法和除法比加法和减法优先级更高。

2)在其他所有运算符周围添加括号。


&& 在 || 之前,&(二进制)在 | 之前的直觉和 * 在 + 之前一样,不是吗? - Aaron
我不会争辩——这只是对我来说一个很好的经验法则。我认为在很久以前使用Pascal编程,搞砸了我对操作符优先级的理解,因为逻辑与/或操作符的优先级高于相等/关系操作符。这一点搞得我一生都困扰不已。 - Michael Burr
如果你像这样使用括号 (foo == bar) || (baz == qux),那么你比LISP还糟糕。 - ben
1
@ben:比LISP还糟糕?真的吗?当然,像大多数概括一样,我在答案中给出的那个应该用一些常识来衡量。也许可以这样理解,“如果你想知道优先级是否是一个因素,请使用括号”。话虽如此,实际上我更喜欢if ((foo == bar) || (baz == qux))而不是if (foo == bar || baz == qux),但并不足够重要以至于我很在意。 - Michael Burr

4

&(row->count)

(这是一个包含链接的 HTML 代码块,其中链接的文本为 "row->count")

1

这个问题已经被问过了。但是这里有一个链接。

编辑: 好的,这个问题非常相似。可能还有另一个。


你能提供那个问题的链接吗?这个问题是否可以用更好的措辞来避免重复发帖的性质? - stung
我可以搜索问题。 - Toon Krijthe

1

C 运算符优先级在 这里 有解释。

根据表格,-> 的优先级高于 & 运算符,所以应该写成 &(row->count)。


1
我可以建议您使用测试程序来解决这些问题吗?这样做的好处是,您可以确信答案对于您的实现是正确的,并且您不会面临回答错误问题的风险。

0

&(row->count)


0

->比&(地址)具有更高的优先级。因此,您的表达式将被评估为&(row->count)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接