这是有效的 C++ 吗?代码是否符合标准?

发布于 2024-10-06 15:11:43 字数 504 浏览 8 评论 0原文

我有这个示例代码:

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 引用并在 methodf f 中使用它。临时对象引用在 f 内仍然有效吗?

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 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 ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

素年丶 2024-10-13 15:11:43

它不会保持有效。初始化a后,临时对象将被销毁。当您调用 f 时,您通过调用 test 来调用未定义的行为。仅以下内容有效:

// Valid - both temporary objects are alive until after the 
// full expression has been evaluated.
Test<>().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();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文