为什么它们被称为“主要”?按照评估的顺序,他们是第一个?
C++03
标准定义第5章(注1)中的表达式:An expression is a sequence of operators and operands that specifies a computation.
然后5.1“初级表达式”定义了初级表达式列表:
(1) 主表达式:
literal this ( expression ) id-expression
我的主要问题是关于第三点:
( expression )
所以,按照标准,所有带括号的表达式都是初级表达式,首先计算它们。它看起来合乎逻辑,并且对 C++ 表达式中括号的行为(优先级)给出了准确的解释。
所以这意味着例如
(variable + 10)
是一个初级表达式。
var = (variable + 10) * 3
根据我的理论,它看起来合乎逻辑,但从我知道的其他来源来看
(variable + 10)
不是主要表达式,但为什么呢?我不明白,但是标准将
(expression)
定义为主要表达式。
请帮助我,因为我做不到。非常感谢,抱歉我的英语不好。 嗨。
最佳答案
C++ 表达式可以很复杂,也就是说它们可以由嵌套表达式组成,通过使用运算符组合,而这些嵌套表达式又可能很复杂。
如果您将一个复杂的表达式分解成更小的单元,在某些时候您将留下原子单元,因为它们无法进一步分解。这些是主要的表达方式;它们包括标识符、文字、关键字 this
, 和 lambda 表达式。
但是,确实有一种非原子构造被 C++ 标准定义为主要构造:用圆括号(也称为圆括号)括起来的表达式。所以 (variable + 10)
您给出的示例是一个主要表达式(子表达式也是variable
(这是一个标识符),和10
(这是一个文字)。
我相信标准将它们列为主要表达式,因为它们在评估顺序方面扮演着真正原子表达式的角色:括号内的任何内容都必须先评估,然后后退表达式的值才能进入评估其他表达:在(5+10)*a
, 5+10
的值必须先评估才能进入*a
的评估. [请注意,这并不意味着 5+10
在表达式 a
之前求值被评估。这只意味着 5+10
必须先评估乘法本身。]
因此,从这个意义上说,括号中的子表达式就好像它们是原子的一样。
我想这就是标准不使用术语“原子表达式”来表示这个概念的原因。它们的行为就好像它们是原子的,但至少括号中的变体实际上不是原子的。在我看来,“主要”是个不错的用词。
关于C++ 主表达式 - 它是不是主表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17259531/