我写了这段代码:
#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.