gpt4 book ai didi

c++ - 为什么在创建第二个对象后更改了第一个对象成员

转载 作者:行者123 更新时间:2023-11-30 03:41:58 25 4
gpt4 key购买 nike

定义了一个以成员为引用类型的类:

struct NodeBase{
int& val;
NodeBase(int input = 0) :val{ input }{}
};

然后创建了这个类类型的两个对象:

int value1 = 1, value2 = 2;
NodeBase first(value1);
NodeBase second(value2);

first 创建时,其成员 val 等于 1。但是,在创建 second 之后 valfirst 更改为 2。不知道为什么会这样。

最佳答案

引用绑定(bind)到函数参数 input,当构造函数完成时,该参数超出范围。这使得引用悬空。

将引用作为参数而不是让引用引用外部对象。

NodeBase(int& input) :val{ input }{}

如果您不希望类引用外部变量,请将成员设为不带引用的普通 int。鉴于您尝试使用对非常量引用案例没有意义的默认参数,这可能是您应该做的。

关于c++ - 为什么在创建第二个对象后更改了第一个对象成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37094079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com