相关疑难解决方法(0)

`x?1:0`变成了40,未定义的行为?

我写了这段代码:

#include <cstdio>
#include <queue>

class Obj {
    bool x;
public:
    Obj(): x(true) {}
    Obj(Obj&& o) {
        o.x = false;
    }
    ~Obj() {
        if(x) {
            std::puts("Here");
            std::printf("%d\n", x ? 1 : 0);
        }
    }
};

int main() {
    std::queue<Obj> q;
    q.push(Obj());
    q.pop();
}
Run Code Online (Sandbox Code Playgroud)

启用优化后,我得到了一个令人困惑的结果:

Here
40
Run Code Online (Sandbox Code Playgroud)

而且数量可以160,24,96或者104通过执行不同的方法程序.在Ideone上没有打印任何内容.

它一定是未定义的行为.但我无法弄清楚出了什么问题.你能说出我的错误吗?

注意:我的编译器是GCC 4.8.1,我的操作系统是Windows 7.

c++ undefined-behavior

3
推荐指数
1
解决办法
226
查看次数

标签 统计

c++ ×1

undefined-behavior ×1