微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。