C++ 引用作用域中的值会产生垃圾

C++ 引用作用域中的值会产生垃圾,c++,class,memory,reference,field,C++,Class,Memory,Reference,Field,我想编写一个引用作为字段的类,但我发现即使是这个初始化引用并打印其值的简单代码也失败了: struct Referencer { explicit Referencer(int in) : num(in) {} void print() { std::cout << num << std::endl; } int &num; }; int main() { int longlived = 500; R

我想编写一个引用作为字段的类,但我发现即使是这个初始化引用并打印其值的简单代码也失败了:

struct Referencer {
    explicit Referencer(int in) : num(in) {}
    void print() {
        std::cout << num << std::endl;
    }
    int &num;
};
int main() {
    int longlived = 500;
    Referencer ref(longlived);
    ref.print();
}
结构引用器{ 显式引用器(int-in):num(in){ 作废打印(){
std::cout引用器
的构造函数按值获取参数。因此
中的
保存
长寿命
中值的副本。然后,您将
num
初始化为
中的
引用,一旦构造函数返回,该引用就会被销毁


如果希望
num
保存对构造函数中用作参数的对象的引用,请通过引用传递
in
,如
explicit Referencer(int&in):num(in){/p>仔细查看
Referencer(int-in):num(in)
in
在您离开构造函数后不再在范围内。可能您的意思是
int&in
。“我的理解是变量
longlived
引用器的实例具有相同的生存期。”当然可以。但是..您的
引用器::num
没有引用
长寿命的
。好吧,我错了。为了更好地理解,请尝试对指针执行相同的操作。。。