- 论坛徽章:
- 0
|
有一点可以确定,设计上便于用户理解优先级或者实现上的贪心匹配什么的,都不关语言本身的事。对于语言而言,这就是“规定”,如此而已。
5 [Example: The program fragment x+++++y is parsed as x ++ ++ + y, which, if x and y are of built-in
types, violates a constraint on increment operators, even though the parse x ++ + ++ y might yield a
correct expression. ]
以上是C++03标准2.4一节中的原文。
53) The precedence of operators is not directly specified, but it can be derived from the syntax.
上面这段C++03标准原文是5 Expression的一行注释。
当然,标题里的问题对于人(而不是机器)来说倒仍然是有意义的。不过恐怕也不会因此能找到明确的“正确”答案。非得站在人类的理解或者机器的实现的角度吵着说“错了”的童鞋,都省省吧(根本是鸡同鸭讲嘛)。
按我的理解,根据奥卡姆剃刀原则,这里在语言的框架内讨论+++++是 ++ ++ + 还是 ++ + ++ 这类问题时,根本没必要引入“(运算符)优先级”这一实体概念(也大约因为如此,标准把上面的Example放在根本没有提到“优先级”的2.4而不是5)。这样,即便是要关注人对语言的理解,也没必要考虑“是不是因为优先级的关系”,因为实际上只要按这段注释里面所说的,通过语法约束推导对语义的影响就很容易明确在这里被表达的应该是何种明确的语义了。
要无视标准(这里看起来至少算作是一种建议的理解方法),不愿意这么理解的话也请自便。
(总觉得这倒是比“左值在不需要作为左值就只是右值”“月亮在你不看它时就不存在”之类的要明确多了。) |
|