【问题标题】:I want to understand in detail distinct between expression and statement in C++. Pls pick concrete example to explain that我想详细了解 C++ 中表达式和语句之间的区别。请选择具体的例子来解释
【发布时间】:2020-10-12 01:35:09
【问题描述】:

现在我正在学习 C++ 编程。我不明白表达式、定义、声明和定义之间的区别。

正如维基百科所说,

在“声明(计算机科学)”中

在大多数语言中,语句与表达式的不同之处在于语句不返回结果并且仅因其副作用而执行,而表达式总是返回结果并且通常根本没有副作用。

在“表达式(计算机科学)”页面中

在许多编程语言中,函数以及包含函数的表达式可能会产生副作用。具有副作用的表达式通常不具有引用透明性的属性。在许多语言(例如 C++)中,表达式可能以分号 (;) 结尾,以将表达式转换为表达式语句。这要求实现仅评估表达式的副作用并忽略表达式的结果(例如“x+1;”),除非它是引起副作用的表达式语句的一部分(例如“y= x+1;" 或 "func1(func2());")。 注意事项

具体来说,这里的“副作用”和“结果”是什么意思?

帮助我,C++ 极客!

【问题讨论】:

标签: c++ expression computer-science declaration definition


【解决方案1】:

具体来说,这里的“副作用”和“结果”是什么意思?

表达式没有副作用,从源代码中删除它不会改变程序语义。

int main(void) {
   int x = 1, y = 2, z = 0;
   // x+y expression calculates sum and ignores resulting answer 
   // NO SIDE EFFECTS, can be removed
   x+y; 
   // x+y expression calculates sum, but then 15 is assigned to z as a result 
   // SIDE EFFECT is that removing given expression breaks program syntax - can't be removed 
   z = (x+y, 15);
}

编辑

顺便说一句,请记住,并非所有表达式语句也有副作用。例如x=x; 在技术上等同于; - 一个空语句,在汇编级别编译为 NOP 或完全被 GCC 优化器跳过。所以这些类型的表达式语句没有副作用,可以安全地从程序中删除。但这并不意味着您可以在不更改程序逻辑的情况下删除 每个 空语句。例如在这个 sn-p 中:
for (i=0; i < 10; i++);
这里每个 CPU 周期都会执行 NOP,因此如果您将其删除 - 程序语义将发生根本性变化。

【讨论】:

  • 问题是++x; 一个表达式?
  • 不,++x; 是一个表达式 statement,- 表达式本身只是 ++x 的一部分。一般来说,表达式通常是序列点之间的东西,-一些标记。例如在if (a+b > c+d) 中,如果部分具有表达式a+b > c+d 和2 个子表达式a+bc+d
  • 谢谢老哥回答我的问题!我
【解决方案2】:

声明通知编译器给定名称是已知的。但是,不会为对象分配内存。我们不能引用一个对象,我们不能给它赋值,因为它还不存在。

extern varType varName;

定义为给定变量保留内存空间。对于哪个变量,我听到你问。没错 - 变量必须在某处声明,以便知道它的名称和类型。好吧,其中有一个陷阱,因为每个定义同时是一个声明(但反之则不然)。

int number;
varType varName;

表达式由按语言规则排列的运算符、常量和变量组成。它还可以包含返回值的函数调用。

x = a+(b*c);
bool ifTrue = a>b;

你应该阅读更多关于表达式there.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多