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'模式存在错误?我的印象是这包括标准库,但我不记得细节(甚至是什么标题),并且从那以后它可能已经被修复了。 –