未定义的行为:理解 cout
在 C 中,必须理解未定义行为的概念。未定义行为是指程序的行为未由 C 标准指定,从而导致不可预测的结果的情况。
考虑以下语句:
cout << a++ << a;
这里,我们有一个序列涉及增量运算符 ( ) 和插入运算符 (
序列点是代码中编译器保证所有副作用都已发生的特定点。然而,在上面的语句中,a 和 a 的计算之间没有顺序点。这意味着标准未指定这些操作的执行顺序。
因此,此语句的输出可能会因实现而异。在某些情况下,输出可能是“01”,而在其他情况下,输出可能是“10”。但是,该标准不保证会发生哪种情况,从而导致行为未定义。
C 17 Update
需要注意的是,管理 C 中表达式求值的规则已在 C 17 中更新。在 C 17 中,以下规则适用于移位运算符表达式,例如 >:
“在移位运算符表达式 E1>E2 中,E1 的每个值计算和副作用都在 E2 的每个值计算和副作用之前排序."
此规则消除了原始语句中未定义的行为。在 C 17 中,语句 cout
以上是为什么是`cout的详细内容。更多信息请关注PHP中文网其他相关文章!