繁体   English   中英

为什么在ctor工作中将temp变量传入const ref?

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

// 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引用它的ctor转换为一个int,然后我将一个临时的int传递给它。 温度在新的之后被摧毁。 为什么我仍然可以打印出d_member?

构造函数初始化列表将整数参数复制到成员变量。 成员变量的生命周期是对象的生命周期。

正如其他人已经提到的非引用成员变量一样,构造函数调用只是复制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)初始化期间复制的。 所以这里没有错

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM