首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复合表达式vs.表达式vs.子表达式

复合表达式vs.表达式vs.子表达式
EN

Stack Overflow用户
提问于 2011-03-09 23:28:10
回答 4查看 7K关注 0票数 3

我觉得我在区分子表达式和表达式时有点困惑。

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

例如,1 + 1 * 1

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

例如1 + 1+ 1

在表达式的下面有没有一个称为子表达式的级别?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-09 23:30:24

表达式不能有运算符。例如,在以下代码中:

代码语言:javascript
复制
int a = 0;
a;

a是一个表达式。引用C++标准,表达式是“指定计算的运算符和操作数序列”(C++03 5/1)。在这里,即使没有运算符,a也是一个“操作数”。

子表达式是一个较大表达式的一部分。因此,在

代码语言:javascript
复制
int a = 0, b = 0, c = 0, d = 0;
a * b + c * d;

a * bc * d是子表达式。

“复合”一词通常用于语句,而不是表达式。复合语句是一对大括号,其中可能包含一系列其他语句。例如,函数体几乎总是复合语句,许多循环体也是如此。

通常,复杂的表达式被简单地称为“表达式”,而它们的各个部分被称为子表达式。

票数 9
EN

Stack Overflow用户

发布于 2011-03-09 23:32:26

  • C++标准在整个章节中定义了表达式的含义(第5章如果我还记得,C++ C++标准没有定义什么是复合表达式
  • C++标准将full expression定义为一个表达式,该表达式不是任何其他表达式

的子表达式

示例:

a + 4 + 5;

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

票数 6
EN

Stack Overflow用户

发布于 2011-03-09 23:45:40

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

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

代码语言:javascript
复制
int f(int const &x=2) { return x; }
int y = f()+4;

f()创建一个临时int,它用值2初始化,然后通过引用传递给f。临时语句的创建和初始化是完整表达式y= f() + 4的子表达式,即使文本int const &x=2是完全分开的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5248016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档