执行和评估之间有什么区别?

Jin*_*Jin 11 c evaluation execution

我们说表达"评估"值和语句命令计算机"执行".但对我来说,似乎是相同的术语.C中的执行和评估有什么区别?

小智 7

它确实足够接近,几乎在所有情况下都不重要。

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

一般来说,我们评估表达式,执行语句。

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

这种混乱被放大了,因为在 C 中我们有改变状态的表达式(赋值运算符、递增/递减运算符),而语句只不过是表达式。

所以当你看到

a = b+c;
Run Code Online (Sandbox Code Playgroud)

在 C 中,它是执行的语句,但执行包括评估表达式a=b+c,其中结果(对 的非常量引用a)被丢弃,并且副作用(a更改其值)很重要。


Fab*_*ica 5

这只是语言学的问题。表达式被评估,语句被执行。在这两种情况下,我们都可以说“某事已完成”,我不会太担心差异。

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

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


hac*_*cks 4

当执行一条语句时,就会对其表达式进行求值操作。首先执行,然后评估。

在片段中

int i = 5, j;
j = 10 + 5*i;
Run Code Online (Sandbox Code Playgroud)

j = 10 + 5*i;当执行该语句时,就会发生表达式j105*i10 + 5*i和的求值。j = 10 + 5*i请注意,前三个可以按任何顺序进行评估。