C COUT行为 /执行顺序
C++ cout behavior / order of execution
我正在研究Cppinstitute CPA-21-01考试的一些示例问题,并且对问题11的问题有些困惑。它说明以下内容:
以下程序的输出是什么?
#include <iostream>
using namespace std;
class A {
public:
A() {
a.a = a.b = 1;
}
struct { int a,b; } a;
int b(void);
};
int A::b(void)
{
int x=a.a;
a.a=a.b;
a.b=x;
return x;
}
int main(void) {
A a;
a.a.a = 0;
a.b();
cout << a.b() << a.a.b << endl;
return 0;
}
a。该程序将导致汇编错误
b。10
c。01
d。11
可以将其归为一个最小的例子:
int swap_and_return(int& a, int& b) {
std::swap(a,b);
return a;
}
int main() {
int a = 0;
int b = 1;
cout << swap_and_return(a,b) << a << endl;
return 0;
}
到目前为止还不错;答案键说是b。
假设您选择d。
据此,执行顺序是任意的:
15)在函数调用中,每个参数的初始化的价值计算和副作用都对任何其他参数的价值计算和副作用进行了不确定的测序。
这里已经有一个类似的问题
我认为cout线可以翻译成 cout.operator<<(a.b()).operator<<(a.a.b);
,这意味着应该有一个序列,行为应该是确定性的?
实际上,获得以下结果:
MS Cl.exe,调试:10
MS Cl.exe,版本:11
GCC,C 11:11
clang:11
不必说,我现在有点困惑,因为他们说这是答案B,而实际上执行顺序是任意的。
任何人都可以解释一下我对执行订单是否正确,应该是什么?
谢谢!
在C 17之前,您是对的,测验不允许正确答案。
从那时起,答案是确定性的。
相关文章:
- QML按钮点击功能执行顺序
- C++ - scanf() 和 printf() 执行顺序不对
- 递归函数的执行顺序
- 运算符 new 的执行顺序和构造函数的参数
- 如何检查参数包是否具有执行顺序中的确切类型
- std::bind() 参数列表中函子的执行顺序(可能与函数参数的求值顺序无关)
- 了解递归函数的执行顺序
- OpenMP 4.5 任务依赖关系和执行顺序
- 通过调试来检查C 中单行表达式执行顺序的方法
- 遵循 C++ 中的构造函数执行顺序
- 联接线程如何影响主线程中的执行顺序?
- C COUT行为 /执行顺序
- 是定义的函数参数的内部执行顺序
- 强制执行执行顺序
- OpenGL计算着色器中线程的执行顺序
- 按执行顺序创建Pthread
- 逻辑操作员执行顺序
- 如何在使用 std::make_tuple 时避免构造函数的未定义执行顺序
- 提升::thread_specific_ptr/清理与退出执行顺序
- C++ 多线程:执行顺序