执行和评估有什么区别?

What is the difference between execution and evaluation?

我们说表达式 "evaluate" 值和语句命令计算机到 "execute"。但对我来说,这似乎是相同的术语。 C 中的执行和求值有什么区别?

当一个语句被执行时,它就会进入对其表达式求值的动作。首先执行,然后评估。

在代码段中

int i = 5, j;
j = 10 + 5*i;

当执行语句 j = 10 + 5*i; 时,会计算表达式 j105*i10 + 5*ij = 10 + 5*i .请注意,前三个可以按任何顺序进行评估。

几乎在所有情况下都非常接近无关紧要。

如果我们要非常精确,我会说评估产生结果值并且不改变状态,而执行改变状态并且结果值要么不产生要么是偶然的并被忽略。

一般来说,我们计算表达式,执行语句。

因此,例如,如果我们在 C 中有一个 if 语句,我们首先评估条件,然后执行(或不执行)主体。

混淆被放大了,因为在 C 中我们有改变状态的表达式(赋值运算符,increment/decrement 运算符)和只是表达式的语句。

所以当你看到

a = b+c;

在 C 中,它是一个被执行的语句,但执行包括计算表达式 a=b+c,其中结果(对 a 的非 const 引用)被丢弃,副作用(a 更改其值)很重要。

这只是语言学的问题。评估表达式,执行语句。在这两种情况下,我们都可以说 "something gets done",我不会太担心差异。

澄清一下:粗略地说,语句是一行代码,表达式是您可以在 if()while() 中的括号内或等号右侧找到的内容签名。

例如,int x = 2 + 3;是声明一个变量x并将表达式2 + 3的结果赋值给它的语句,即5

我的想法是:术语 'expression' 是从数学术语中继承而来的。评价为defined as:

evaluate

To evaluate is to find the value of a numerical or algebraic expression.

表达式有 following definition:(加黑体表示强调)

An expression in a programming language is a combination of one or more explicit values, constants, variables, operators, and functions that the programming language interprets (according to its particular rules of precedence and of association) and computes to produce ("to return", in a stateful environment) another value.

在编程中,几乎每个语句(或每个值得编写的语句)都由许多表达式组成。我一直使用 evaluation 来指代这些表达式的计算,并使用 execution 来指代整个语句的计算。这通常与 return 价值和副作用的区别相吻合。完整语句通常有副作用,表达式通常 return 某种值。