我是新來的C++後有效跑進以下據稱錯誤,但不知何故,我的計劃只是工程.. 下面是代碼爲什麼排隊的返回值:前()隊列:: pop()方法
#include<iostream>
#include<queue>
#include <string>
int main()
{
string s ("cat");
queue<string> _queue;
_queue.push(s);
string & s1 = _queue.front();
_queue.pop();
// at this time s1 should become invalid as pop called destructor on s
std::cout << s1 << std::endl;
return 0;
}
它只是起作用,即使s1是對無效對象的引用。有沒有一種方法可以斷言s1真正指向一個無效的對象?
這是教科書[未定義行爲](http://en.wikipedia.org/wiki/Undefined_behavior),根據定義,它在運行時不是「可檢測的」,因爲您已經在UB-land中。 – ildjarn
Ty爲與UB建立良好關係。 – Jimm
請參見[局域變量的內存是否可以在其範圍之外訪問?](http://stackoverflow.com/a/6445794/597607) –