C++结构体存储外部可变变量引用的成员类型声明疑问
问题解答
你当前的代码无法实现存储变量引用的需求,你对代码的理解存在两个明显误区:
- 第一,你结构体中声明的
ntot_sols成员是int值类型,不是引用类型。你在构造函数中把作为引用传入的_ntot_sols赋值给它时,只会拷贝当前_ntot_sols的数值,二者后续是完全独立的两个变量,外部ntot_sols更新时,结构体内部的ntot_sols不会同步变化。 - 第二,你构造函数中
nsols = nsols;这行代码是无效的:你传入的形参是_nsols,这行代码相当于把未初始化的成员变量nsols赋值给它自身,最终nsols会是随机的垃圾值。
正确实现方式
如果要让结构体成员持有外部变量的引用,需要主动将成员声明为引用类型,且引用类型的成员必须在构造函数的初始化列表中完成绑定,不能在构造函数体内赋值:
struct ItemWeighter { int nsols; int& ntot_sols; // 声明为int引用类型 // 用初始化列表初始化两个成员,避免无效赋值 ItemWeighter(int _nsols, int& _ntot_sols) : nsols(_nsols), ntot_sols(_ntot_sols) { } float weight() { return nsols / float(ntot_sols); } };
这样修改后,ntot_sols成员就会和外部传入的变量绑定,外部变量更新时,结构体内部读取到的数值也会同步更新。
内容的提问来源于stack exchange,提问作者financial_physician
相关产品推荐
相关产品推荐

