2011-04-13 67 views

回答

10

这是合法的,并解析为x---y

我相信前两个减号被解释为减法后运算符,因为它是x后面最长的令牌,它是合法出现的。这使得第三个减去扮演减法的角色。 这是按照最大规则 [1]

[1]。 http://en.wikipedia.org/wiki/Maximal_munch

0

(x - ) - y;你使用哪个编译器? x和y的类型是什么?

1

这与运算符优先级有关。看看这个table

递减/增量运算符优先于算术运算。它将被解析为x-- - y

要纠正我的回答:解析器最长令牌第一相匹配,所以--选择在算术-。导致表达式被解析为x-- - y

+1

提及运算符优先级*和*链接源。 – Mephane 2011-04-13 12:46:04

+14

Tokenization规则,而不是运算符优先级。 – aschepler 2011-04-13 12:46:18

+1

这不是与优先级有关,而是语言如何被解析*。 – Jon 2011-04-13 12:46:30

1

对于所有数据类型,它被解析为x-- - y。如果是一些class对象,那么你必须定义后递减运营商和负操作,它会给编译错误,如果你只是定义预减运营商。这意味着,无论如何x-- - y都是被迫的。