【发布时间】:2018-03-28 19:13:44
【问题描述】:
我想编写一个将引用作为字段的类,但我发现即使是这个初始化引用并打印其值的简单代码也失败了:
struct Referencer {
explicit Referencer(int in) : num(in) {}
void print() {
std::cout << num << std::endl;
}
int #
};
int main() {
int longlived = 500;
Referencer ref(longlived);
ref.print();
}
结果是垃圾(没有抛出错误,也没有程序段错误)。我的理解是变量longlived 与Referencer 的实例具有相同的生命周期,因为它们都在堆栈中声明并且具有相同的范围。因此,当调用ref.print() 时,字段num 应该指向有效的堆栈内存。为什么不是这样?
【问题讨论】:
-
仔细看
Referencer(int in) : num(in) -
in离开构造函数后不再在作用域内。也许你的意思是int & in。 -
"我的理解是变量
longlived与Referencer的实例具有相同的生命周期"当然可以。但是..您的Referencer::num没有引用longlived。 -
哎呀,我的错。
-
为了更好地理解,试着用指针做同样的事情......
标签: c++ class memory reference field