我觉得我在区分子表达式和表达式时有点困惑。
Compound expression -涉及多个运算符的表达式。
例如,1 + 1 * 1
Expression -具有一个或多个操作数的运算符。
例如1 + 1或+ 1
在表达式的下面有没有一个称为子表达式的级别?
发布于 2011-03-09 23:30:24
表达式不能有运算符。例如,在以下代码中:
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是子表达式。
“复合”一词通常用于语句,而不是表达式。复合语句是一对大括号,其中可能包含一系列其他语句。例如,函数体几乎总是复合语句,许多循环体也是如此。
通常,复杂的表达式被简单地称为“表达式”,而它们的各个部分被称为子表达式。
发布于 2011-03-09 23:32:26
full expression定义为一个表达式,该表达式不是任何其他表达式的子表达式
示例:
a + 4 + 5;
a + 4 + 5是一个完整的表达式。该表达式中的a、4或a + 4都不是完整表达式(尽管它们是(子)表达式),因为它是上述表达式的子表达式
发布于 2011-03-09 23:45:40
尽管您已经收到了一些很好的答案,但我将添加一个从这些答案中可能看不出来的细节:子表达式也可以是一个完全独立的表达式,它不是正在计算的完整表达式的词法部分。
最明显的例子是当你调用一个使用默认参数的函数时。在这种情况下,将默认值分配给参数被视为调用表达式的子表达式。例如,给定如下内容:
int f(int const &x=2) { return x; }
int y = f()+4;f()创建一个临时int,它用值2初始化,然后通过引用传递给f。临时语句的创建和初始化是完整表达式y= f() + 4的子表达式,即使文本int const &x=2是完全分开的。
https://stackoverflow.com/questions/5248016
复制相似问题