c++ - 我想详细了解 C++ 中表达式和语句之间的区别。请选择具体的例子来解释
问题描述
现在我正在学习 C++ 编程。我不明白表达式、定义、声明和定义之间的区别。
正如维基百科所说,
在“声明(计算机科学)”中
在大多数语言中,语句与表达式的不同之处在于语句不返回结果并且仅因其副作用而执行,而表达式总是返回结果并且通常根本没有副作用。
在“表达(计算机科学)”页面
在许多编程语言中,函数以及包含函数的表达式可能具有副作用。具有副作用的表达式通常不具有引用透明性的属性。在许多语言(例如 C++)中,表达式可以以分号 (;) 结束,以将表达式转换为表达式语句。这要求实现仅评估表达式的副作用并忽略表达式的结果(例如“x+1;”),除非它是引起副作用的表达式语句的一部分(例如“y= x+1;" 或 "func1(func2());")。注意事项
具体来说,这里的“副作用”和“结果”是什么意思?
帮助我,C++ 极客!
解决方案
具体来说,这里的“副作用”和“结果”是什么意思?
表达式没有副作用,从源代码中删除它不会改变程序语义。
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 优化器跳过的空语句。所以这些类型的表达式语句没有副作用,可以安全地从程序中删除。但这并不意味着您可以在不更改程序逻辑的情况下删除每个空语句。例如在这个片段中:
for (i=0; i < 10; i++);
这里 NOP 在每个 CPU 周期执行,所以如果你将它删除 - 程序语义将彻底改变。
推荐阅读
- amazon-web-services - Cloudformation IAM 政策
- python - Why doesn't else statement work instead of if (all previous cases aren't true)?
- ruby-on-rails - 如何在 Rails 中运行特定的 AJAX 调用
- database - Redshift 真空排序默认值
- javascript - 将参数传递给节点 js API 调用?
- bigtable - Bigtable 行键场景避免热点?
- javascript - 单击 Like 按钮后重新渲染反应组件(使用 Redux)
- android - 单击 PagerAdapter 时如何显示全屏图像?
- javascript - Firebase Auth 的 onAuthStateChanged 中的 React 的 SetState 导致 setState 未定义
- php - 致命错误:无法对表达式的结果使用 isset()(您可以改用“null !== expression”))