首页  >  文章  >  后端开发  >  为什么在 cout 中使用后自增运算符的 C 程序的输出未定义?

为什么在 cout 中使用后自增运算符的 C 程序的输出未定义?

Barbara Streisand
Barbara Streisand原创
2024-11-06 08:23:02243浏览

Why is the output of a C   program with post-increment operators used in cout undefined?

C 中后置增量的未定义行为

在 C 中,后置增量运算符 (i ) 将变量的值增加1 评估后。当与 cout 中的插入运算符 (

程序 1

考虑以下代码片段:

<code class="cpp">#include <iostream>
using namespace std;

main(){
    int i = 5;
    cout << i++ << i-- << ++i << --i << i << endl;
}</code>

该程序的输出未定义。根据 C 标准,当标量对象(例如 i)的副作用相对于使用同一对象的另一个副作用或值计算而言是无序的时,该行为是未定义的。

解释:

表达式 cout

  1. i :将 i 递增到 6 并返回 5。
  2. i--:将 i 递减到 5。
  3. i:将 i 递增到 6。
  4. --i:将 i 递减到 5。
  5. i:返回 5。

但是,该标准没有定义这些副作用发生的顺序。这意味着编译器可以按任何顺序执行它们,可能会在每次运行程序时产生不同的输出。在这种特定情况下,输出为“55555”,因为副作用是按照上面列出的顺序执行的。

程序 2

以下程序还演示了未定义的行为:

<code class="cpp">int x = 20, y = 35;
x = y++ + y + x++ + y++;
cout << x << endl << y;</code>

该程序的预期输出是 126 和 37。但是,由于未定义的行为,实际输出可能会因编译器实现而异。

道德故事:

必须避免将后增量与 cout 或任何其他依赖增量副作用的操作结合使用。相反,使用单独的行来修改和打印变量以确保可预测的行为。

以上是为什么在 cout 中使用后自增运算符的 C 程序的输出未定义?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn