cout函数调用中未定义的行为?

问题描述

#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;
}

我目前正在练习C ++认证,因此遇到了这个问题。我发现奇怪的是,在提示之后,如果我只打印aab值,它会打印1,但是代码本身显示10,所以aab的值被认为是0。根据我在网上所做的研究,似乎这是未定义的行为,因为不能保证在cout调用中,编译器将首先评估ab()调用,然后评估aab值。

在此cout中,编译器是否应按确定的顺序计算表达式?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...