C++ 复合表达式vs.表达式vs.子表达式

C++ 复合表达式vs.表达式vs.子表达式,c++,expression,C++,Expression,我觉得在这里我有点搞不清楚如何区分子表达式和表达式 复合表达式-包含多个运算符的表达式 例如1+1*1 表达式-具有一个或多个操作数的运算符 例如1+1或+1 表达式下面是否有称为子表达式的级别?表达式可能没有运算符。例如,在以下情况下: int a = 0; a; a是一个表达式。表达式是引用C++标准的“指定计算的运算符和操作数序列”(C++ 03 5/1)。这里,a是一个“操作数”,即使没有运算符 子表达式是较大表达式的一部分的任何表达式。那么在 int a = 0, b = 0, c

我觉得在这里我有点搞不清楚如何区分子表达式和表达式

复合表达式
-包含多个运算符的表达式

例如
1+1*1

表达式
-具有一个或多个操作数的运算符

例如
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++标准没有定义复合表达式是什么< < /p> < > > C++标准定义了<代码>完全表达式< /代码>,作为表达式,它不是任何其他表达式

    的子表达式。
例如:

a+4+5


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

,尽管您已经收到了一些很好的答案,我将再添加一个从这些答案中可能看不出的细节:子表达式也可以是一个完全独立的表达式,它在词汇上不属于所计算的完整表达式的一部分

最明显的例子是当您调用使用默认参数的函数时。在这种情况下,将默认值指定给参数被视为调用表达式的子表达式。例如,假设:

int f(int const &x=2) { return x; }
int y = f()+4;
f()。该临时变量的创建和初始化是完整表达式
y=f()+4
的子表达式,即使文本
int const&x=2
是完全独立的