2011-03-09 57 views
3

我觉得这里有点困惑,从表达式中区分子表达式。复合表达式vs.表达式与子表达式

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

E.g. 1 + 1 * 1

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

E.g 1 + 1+ 1

是有其被称为子表达的表达以下的水平?

回答

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的子表达式。


词语 “化合物” 通常相对于用于语句,不表达式。复合语句是一对可能包含一系列其他语句的大括号。例如,函数体几乎总是一个复合语句,就像许多循环体一样。

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

0

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

+0

即使这些都是表达式。 – delnan 2011-03-09 15:32:45

+0

@delnan我同意 – 2011-03-09 15:35:00

6
  • C++标准定义了一个表达 是什么在一整章(第5章如果我记得正确)。

  • C++标准没有定义的化合物的表达是什么

  • C++标准定义了一个full expression作为不被任何其他表达的子表达式的表达式

示例:

a + 4 + 5;

a + 4 + 5是一个完整的e的表达。无论是在表达a也不4也不a + 4充满表达式(虽然他们是(子)表达式),因为它是上述表达式的子表达式

+0

+1 - 是的,它是第5章。 – 2011-03-09 15:38:26

4

虽然你已经获得了一些很好的答案,我会添加更多的从这些答案中可能不明显的细节:子表达式也可以是一个完全独立的表达式,它不是正在评估的完整表达式的词汇组成部分。

这是一个明显的例子,当您调用使用默认参数的函数时。在这种情况下,将默认值分配给参数被认为是调用表达式的子表达式。例如,给定这样的:

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

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