复合表达与表达与子表达的比较

时间:2011-03-09 15:28:10

标签: c++ expression

我觉得我在这里区分子表达与表达有点混淆。

Compound expression - 涉及多个运算符的表达式。

E.g。 1 + 1 * 1

Expression - 具有一个或多个操作数的运算符。

E.g 1 + 1+ 1

是否有一个低于表达式的级别,称为子表达式?

4 个答案:

答案 0 :(得分:9)

表达式可能没有运算符。例如,在以下内容中:

int a = 0;
a;

a是一个表达式。引用C ++标准,表达式是“指定计算的一系列运算符和操作数”(C ++ 03 5/1)。在这里,即使没有运算符,a也是“操作数”。


子表达式是任何表达式,它是较大表达式的一部分。所以,在

int a = 0, b = 0, c = 0, d = 0;
a * b + c * d;

a * bc * d是子表达式。


单词“compound”通常用于语句,而不是表达式。复合语句是一对可以包含一系列其他语句的大括号。例如,函数体几乎总是复合语句,许多循环体也是如此。

通常,复杂表达式只是简称为“表达式”,它们的部分称为子表达式。

答案 1 :(得分:6)

  • C ++标准定义了什么 表达式在整章中(如果我没记错的话,第5章)。

  • C ++标准没有定义复合表达式是什么

  • C ++标准将full expression定义为一个表达式,它不是任何其他表达式的子表达式

示例:

a + 4 + 5;

a + 4 + 5是一个完整的表达方式。该表达式中的a4a + 4都不是完整表达式(尽管它们是(子)表达式),因为它是上述表达式的子表达式

答案 2 :(得分:4)

虽然你已经收到了一些好的答案,但我还会添加一个从这些答案中可能不明显的细节:一个子表达式也可以是一个完全独立的表达式,而不是整个表达式的词法部分。评价。

这个显而易见的例子是当你调用一个使用默认参数的函数时。在这种情况下,为参数分配默认值被视为调用表达式的子表达式。例如,给出类似的东西:

int f(int const &x=2) { return x; }
int y = f()+4;

f()创建一个临时int,其初始化为值2,然后通过引用传递给f。即使文本y= f() + 4完全独立,该临时文件的创建和初始化也是完整表达式int const &x=2的子表达式。

答案 3 :(得分:0)

据我从上述定义中了解,2+3-4*ptr是表达式。什么可以比这更短?也许只有标识符和常量,例如4