当程序执行取决于执行顺序时,是否是未定义的行为
Is it undefined behaviour when program execution depends on execution order?
在形式的表达式中
f( g(), h() );
未定义g()
和h()
的评估顺序。它只是指定一个必须在另一个之前发生。如果g()
和h()
都有程序执行所依赖的可见副作用,那么这种未定义的行为吗?
">
未定义的行为"具有非常具体的技术含义:这意味着对程序可以做的事情没有任何限制。它可能会使计算机着火或侮辱用户。在这里,执行顺序是未指定的 - 根据评估事物的顺序,有几个选项可以发生什么。如果不了解有关编译器、优化器和执行环境的更多信息,就无法准确预测它将是哪一个。
不,不是。术语未定义的行为意味着程序中可能发生任何事情(包括崩溃(。这里的行为是不可预测的,这意味着一件事可能会发生或另一件事,你不能依赖评估的顺序。
最大的区别在于,在您的情况下,从理论上讲,您可以通过测试每次调用后选择的顺序并采取相应的行动来回到程序中的轨道。另一方面,一旦你遇到一个未定义的行为案例,你就完蛋了:它可以随时随地以任何方式咬你,直到程序结束。
相关文章:
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 编译C++时未定义的引用
- vscode g++链路故障:体系结构x86_64的未定义符号
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 生成文件问题(体系结构x86_64的未定义符号:"_main",引用自:主可执行文件的隐式入口/启动)
- 执行 std::min(0.0, 1.0) 和 std::max(0.0, 1.0) 会产生未定义的行为
- 上溢/下溢是执行时未定义的行为吗
- 如何在使用 std::make_tuple 时避免构造函数的未定义执行顺序
- C++ [链接器错误] 未定义对"执行计算(字符,双精度)"的引用
- glLinkProgram() 在程序执行中未定义,即使 glew 报告它存在
- 在同一语句中调用的执行 IO 的函数:未定义或未指定
- 当程序执行取决于执行顺序时,是否是未定义的行为
- 在.so内部定义的extern变量和可执行引线执行未定义的行为
- 建筑x86_64的未定义符号:... "_main" ,引用自:主可执行文件的隐式入口/启动
- 一行中函数调用的执行顺序-未定义
- 如何捕捉未定义的行为而不执行它
- 为什么有些程序以未定义的行为执行,而另一些则没有?
- JNI共享库中未定义的符号,可执行文件正在工作