变量的评估
Evaluation of variable
变量求值是什么意思?
int main(){
int variable;
variable;
}
“变量”有什么作用?为什么“变量”的评估应该产生自己的价值?
评估基本上意味着“执行代码”。
在表达式中,variable
将包含该变量值的 int
“加载”到 CPU。
评估语句 variable;
将该值“加载”到 CPU,然后它什么都不做。 (编译器足够聪明,可以检测到没有任何反应,并且会忽略它。如果你幸运的话,它还会产生一个警告,让你知道这没有任何作用,这是可疑的。)
评估语句 int a = variable;
将该值“加载”到 CPU,然后将其分配给名为 a
.
的新局部变量
在 C++ 中,与其他语言一样,表达式 被求值,通常return 是一个奇异值。这是通过遵循 operator precedence rules 以正确的顺序应用运算符来实现的。1
最简单的情况:
int x = 2;
int y = x + x * x;
其中表达式的 right-hand-side(相对于 =
赋值运算符)在每种情况下都需要求值。第一个语句很简单,就是 2
。在第二个中,评估顺序规则适用,你得到 2 + 4
或 6
.
求值是按正确顺序应用每个运算符的过程,它将产生奇异值,即该表达式的结果。
将评估视为类似于确定数学公式结果时的评估方式。规则不同,但原则相同。
1 计算参数的顺序可能不一定是它们定义的顺序。
“计算一个表达式”意味着计算它的结果并执行它的副作用。
表达式variable
没有副作用。 (不像 x = 1
或 printf("abc")
这样的东西)。
它的结果类型为 int
(确定类型不是评估的一部分,因为它从不需要运行时计算),并且结果有一些任意值(实际上读取该值会导致未定义的行为,因为变量未初始化)。这个结果还有一个地址,就是variable
的地址(你可以对这个表达式应用&
得到那个地址)
简而言之,variable;
什么都不做。
Evaluation of each expression includes:
- value computations: calculation of the value that is returned by the expression. This may involve determination of the identity of the object (glvalue evaluation, e.g. if the expression returns a reference to some object) or reading the value previously assigned to an object (prvalue evaluation, e.g. if the expression returns a number, or some other value)
- Initiation of side effects: access (read or write) to an object designated by a volatile glvalue, modification (writing) to an object, calling a library I/O function, or calling a function that does any of those operations.
变量求值是什么意思?
int main(){
int variable;
variable;
}
“变量”有什么作用?为什么“变量”的评估应该产生自己的价值?
评估基本上意味着“执行代码”。
在表达式中,variable
将包含该变量值的 int
“加载”到 CPU。
评估语句 variable;
将该值“加载”到 CPU,然后它什么都不做。 (编译器足够聪明,可以检测到没有任何反应,并且会忽略它。如果你幸运的话,它还会产生一个警告,让你知道这没有任何作用,这是可疑的。)
评估语句 int a = variable;
将该值“加载”到 CPU,然后将其分配给名为 a
.
在 C++ 中,与其他语言一样,表达式 被求值,通常return 是一个奇异值。这是通过遵循 operator precedence rules 以正确的顺序应用运算符来实现的。1
最简单的情况:
int x = 2;
int y = x + x * x;
其中表达式的 right-hand-side(相对于 =
赋值运算符)在每种情况下都需要求值。第一个语句很简单,就是 2
。在第二个中,评估顺序规则适用,你得到 2 + 4
或 6
.
求值是按正确顺序应用每个运算符的过程,它将产生奇异值,即该表达式的结果。
将评估视为类似于确定数学公式结果时的评估方式。规则不同,但原则相同。
1 计算参数的顺序可能不一定是它们定义的顺序。
“计算一个表达式”意味着计算它的结果并执行它的副作用。
表达式variable
没有副作用。 (不像 x = 1
或 printf("abc")
这样的东西)。
它的结果类型为 int
(确定类型不是评估的一部分,因为它从不需要运行时计算),并且结果有一些任意值(实际上读取该值会导致未定义的行为,因为变量未初始化)。这个结果还有一个地址,就是variable
的地址(你可以对这个表达式应用&
得到那个地址)
简而言之,variable;
什么都不做。
Evaluation of each expression includes:
- value computations: calculation of the value that is returned by the expression. This may involve determination of the identity of the object (glvalue evaluation, e.g. if the expression returns a reference to some object) or reading the value previously assigned to an object (prvalue evaluation, e.g. if the expression returns a number, or some other value)
- Initiation of side effects: access (read or write) to an object designated by a volatile glvalue, modification (writing) to an object, calling a library I/O function, or calling a function that does any of those operations.