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
是完全独立的