|
发表于 2024-1-5 11:25:22
|
显示全部楼层
这个问题已经说得很清楚了。关于表达式的求值,标准里也已经说得很清楚了。标准里已经表明以下问题:
1,什么是求值;
2,什么情况下不用求值。
因此,对于表达式 a = 1 来说,子表达式 a 用来指示一个对象,这就是它的使命,你还对它求值干什么?有什么作用?有什么意义??就好比表达式 sizeof (a = 1),因为求值 a = 1没有用处,所以就不会求值。
所以这是一个标准条款的适用性问题。标准只说了什么是求值,但并没说但凡是表达式都要拿过来求值。相比之下,表达式 a = 1 里面的 a 有更好的适用条款:
6.5 Expressions
1 An expression is a sequence of operators and operands that specifies computation of a value, or that designates an object or a function, or that generates side effects, or that performs a combination thereof.
翻译过来就是,表达式的作用是计算一个值,指示一个对象或者函数,产生一个副作用,或者兼而有之。显然,在表达式 a = 1 里的 a 就是指示一个对象,这是很明显的了,不需要进一步追究求值的事情,毕竟求值的概念也没说求值适用于什么情况,适用于哪些表达式。
同时,这里还有个一般和特殊的哲学问题。照标准的上述说法,一个表达式是一个运算符和操作数的序列。如果严格来扣字眼的话,
y = 1
是表达式,而
y
不是表达式,因为没有运算符,只有操作数。
标准是用来解决分歧的,而不是制造分歧。 |
|