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++ では合法であるように思われることを示しています。なんで?

私のコンパイラは VC++ 2013 です。

4

1 に答える 1