首页 > 后端开发 > C++ > 正文

第四版'C 编程语言”代码是否表现出明确定义的行为?

Barbara Streisand
发布: 2024-10-23 22:14:29
原创
182 人浏览过

Does Fourth Edition

《C 编程语言》第四版中的代码是否具有明确定义的行为?

尽管如此,相关代码仍表现出未指定的行为不调用未定义的行为。这是由于子表达式的求值顺序未指定,特别是对于 s.replace() 的调用。

未指定子表达式求值的原理

函数参数具有未指定的求值顺序,这意味着无法假定各个函数参数的求值顺序。在这种情况下,不保证 s.find() 的参数在 s.replace() 之前或之后进行求值。

求值顺序影响

取决于评估顺序,s.find() 的结果可能会因 s.replace() 的副作用而改变。这是因为 s.replace() 修改了字符串的长度,影响了后续 s.find() 调用的结果。

实际评估差异

中根据提供的测试,clang 在 s.replace(0, 4, "") 之前评估 s.find("even"),而 gcc 可能以相反的顺序评估它们。这种顺序上的差异导致链式函数调用的结果不同。

C 17 更改

在 C 17 中,后缀表达式的求值顺序(如链式调用)得到了加强。函数参数中参数的初始化(包括副作用)现在相对于其他参数的顺序不确定。这确保了像相关代码这样的代码将具有明确指定的行为。

以上是第四版'C 编程语言”代码是否表现出明确定义的行为?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!