0
#include <iostream>
using namespace std;
struct A
{
A()
: _p(new int(1))
{}
~A()
{
*_p = 0;
delete _p;
_p = nullptr;
}
int* _p;
};
int main()
{
//
// Let r_to_a reference to a temporary object
//
A& r_to_a = A();
//
// Is r_to_a still valid now?
//
cout << *r_to_a._p << endl; // Output : 1 instead of a run-time error
}
正如我所知道的,非const引用臨時對象是不合格的。但是,上面的代碼顯示它在C++中似乎是合法的。爲什麼?爲什麼我們可以非const引用臨時對象並延長其生命期?
我的編譯器是VC++ 2013
當您明確禁用擴展時,它也將無法編譯它自己的頭文件;-) – rubenvb
@rubenvb:我的印象是它可能無法編譯WindowsAPI頭文件的擴展禁用。但是標準頭文件應該是可編譯的。 (糾正我,如果我錯了。) – AnT
@AndreyT:我確信我記得一些巨大的行:有些時候MSVC的圖書館實施者正式宣佈他們不支持'/ Za'。也許是因爲'/ Za'模式存在錯誤?我的印象是這包括標準庫,但我不記得細節(甚至是什麼標題),並且從那以後它可能已經被修復了。 –