为什么在CTOR工作中将温度变量传递到const Ref中

why passing in a temp variable into const ref in ctor work?

本文关键字:const Ref 变量 CTOR 工作中 温度 为什么      更新时间:2023-10-16
// Example program
#include <iostream>
#include <string>
struct foo
{
    int d_member;
    foo(const int & in):
    d_member(in){};
};
int main()
{
    foo *p;
    {
        int temp = 5;
        p = new foo(temp);
    }
    std::cout << p->d_member << std::endl;
    return 0;
}

foo将const ref与int的ctor进行,我通过了一个临时的int。新临时被摧毁。为什么我仍然能够打印出D_Member?

您的构造函数初始化列表 copies 成员变量的整数参数。您的会员变量的寿命是您对象的寿命。

正如其他已提到的非参考成员变量所述的其他构造函数调用简单从 const参考参数复制值(如果您通过参考或值传递,甚至无关紧要(。

如果您的成员变量是参考

,您的情况会有所不同
struct foo
{
    const int& d_member; // <<<< reference member variable
    foo(const int & in): d_member(in){};
};

在这种情况下,访问范围块后访问 d_member会增加不确定的行为

{
    int temp = 5;
    p = new foo(temp);
}
std::cout << p->d_member << std::endl; // <<<<  Undefined behavior

是的, temp被破坏,但在此之前,在d_member(in)初始化过程中已复制。所以这里没有任何错误