开发者

Is this valid C++ code according to standard?

开发者 https://www.devze.com 2023-01-30 05:22 出处:网络
I have this sample code: struct A { bool test() const { return false; } }; template <typename T = A> class Test

I have this sample code:

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开发者_JAVA百科 T& t_;
};

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

Basically I am worried about the constructor of Test where I am storing a const reference to a temporary variable and using it in methof f. Will the temporary object reference remains valid inside f ?


It won't remain valid. The temporary object will be destroyed after initializing a. At the time you call f you invoke undefined behavior by calling test. Only the following is valid:

// Valid - both temporary objects are alive until after the 
// full expression has been evaluated.
Test<>().f();
0

精彩评论

暂无评论...
验证码 换一张
取 消