我们说表达式“评估”值和语句命令计算机“执行”。但对我来说,似乎是相同的术语。 C中的执行和评估有什么区别?
当一个语句被执行时,它将涉及其表达式的评估行为。首先执行然后进行评估。
在片段中
int i = 5, j;
j = 10 + 5*i;
当执行语句j = 10 + 5*i;
然后评估表达式j
,10
,5*i
,10 + 5*i
和j = 10 + 5*i
。请注意,前三个可以按任何顺序进行评估。
这只是一个语言学问题。表达式被评估,语句被执行。在这两种情况下,我们都可以说“有些事情已经完成”,我不会过分担心这种差异。
澄清:粗略地说,语句是一行代码,表达式是你可以在if()
或while()
中的括号之间找到的,或者在等号的右边。
例如,int x = 2 + 3;
是一个声明变量x
的语句,并为其指定表达式2 + 3
的结果,即5
。
几乎在所有情况下,它都非常接近并不重要。
如果我们要非常精确,我会说评估会产生一个结果值并且不会改变状态,而执行会改变状态,结果值要么不产生要么是偶然的并被忽略。
一般来说,我们评估表达式,我们执行语句。
因此,例如,如果我们在C中有一个if
语句,我们首先评估条件,然后我们执行(或不执行)正文。
混淆被放大,因为在C中我们有表达式来改变状态(赋值运算符,递增/递减运算符)和只是表达式的语句。
所以当你看到
a = b+c;
在C中,它是一个执行的语句,但执行包括评估表达式a=b+c
,其中结果(对a
的非const引用)被丢弃,副作用(a
改变其值)很重要。
我想到的方式是:“表达”一词来自数学术语。评估是defined as:
评估
评估是要找到数值或代数表达式的值。
表达式有following definition :(为了强调增加了粗体字)
编程语言中的表达式是编程语言解释的一个或多个显式值,常量,变量,运算符和函数的组合(根据其特定的优先级和关联规则)并计算生成(“返回”) ,在有状态的环境中)另一个价值。
在编程中,几乎每个语句(或每个值得写的语句)都由许多表达式组成。我总是使用评估来指代这些表达式和执行的计算,以引用整个语句的计算。这通常与返回值和副作用的区别相吻合。完整语句通常有副作用,表达式通常会返回某种值。