我觉得这里有点困惑,从表达式中区分子表达式。复合表达式vs.表达式与子表达式
Compound expression
- 涉及多个运算符的表达式。
E.g. 1 + 1 * 1
Expression
- 具有一个或多个操作数的运算符。
E.g 1 + 1
或+ 1
是有其被称为子表达的表达以下的水平?
我觉得这里有点困惑,从表达式中区分子表达式。复合表达式vs.表达式与子表达式
Compound expression
- 涉及多个运算符的表达式。
E.g. 1 + 1 * 1
Expression
- 具有一个或多个操作数的运算符。
E.g 1 + 1
或+ 1
是有其被称为子表达的表达以下的水平?
表达式可能没有运算符。例如,在以下内容中:
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 * b
和c * d
的子表达式。
词语 “化合物” 通常相对于用于语句,不表达式。复合语句是一对可能包含一系列其他语句的大括号。例如,函数体几乎总是一个复合语句,就像许多循环体一样。
通常,复杂表达式只是简单地称为“表达式”,它们的部分称为子表达式。
据我所知,从上面的定义,2+3
,-4
和*ptr
是表达式。什么可以比这更短?也许只有标识符和常量,例如4
。
C++标准定义了一个表达 是什么在一整章(第5章如果我记得正确)。
C++标准没有定义的化合物的表达是什么
C++标准定义了一个full expression
作为不被任何其他表达的子表达式的表达式
示例:
a + 4 + 5;
a + 4 + 5
是一个完整的e的表达。无论是在表达a
也不4
也不a + 4
充满表达式(虽然他们是(子)表达式),因为它是上述表达式的子表达式
+1 - 是的,它是第5章。 – 2011-03-09 15:38:26
虽然你已经获得了一些很好的答案,我会添加更多的从这些答案中可能不明显的细节:子表达式也可以是一个完全独立的表达式,它不是正在评估的完整表达式的词汇组成部分。
这是一个明显的例子,当您调用使用默认参数的函数时。在这种情况下,将默认值分配给参数被认为是调用表达式的子表达式。例如,给定这样的:
int f(int const &x=2) { return x; }
int y = f()+4;
的f()
创建与值2初始化,然后通过引用传递到f
临时int
。即使文本int const &x=2
完全独立,该临时文件的创建和初始化也是完整表达式y= f() + 4
的子表达式。
即使这些都是表达式。 – delnan 2011-03-09 15:32:45
@delnan我同意 – 2011-03-09 15:35:00