3

私はこのサンプルコードを持っています:

struct A
{
    bool test() const
    {
        return false;
    }
};


template <typename T = A>
class Test
{
public:
    Test(const T& t = T()) : t_(t){}

    void f()
    {
        if(t_.test())
        {
            //Do something
        }
    }
private:
    const T& t_;
};

int main()
{
    Test<> a;
    a.f();
}

Test基本的に、一時変数へのconst参照を格納し、それをmethofで​​使用するコンストラクターについて心配していfます。一時オブジェクト参照は内部で有効なままですfか?

4

1 に答える 1

7

有効なままにはなりません。一時オブジェクトは、初期化後に破棄されますa。呼び出すときに、fを呼び出すことによって未定義の動作を呼び出しtestます。以下のみが有効です。

// Valid - both temporary objects are alive until after the 
// full expression has been evaluated.
Test<>().f();
于 2010-12-09T09:20:08.887 に答える