You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:06:03