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

如何通过AlertTrackingState()初始化列表初始化TrackCmdTime结构体成员?

如何在结构体初始化列表中初始化嵌套的TrackCmdTime成员?

你作为C++新手,想要通过AlertTrackingState的构造函数初始化列表来初始化其中的TrackCmdTime类型成员track,可以参考以下两种实用方法:

方法1:直接使用聚合初始化(C++11及以上)

TrackCmdTime是无自定义构造函数的聚合类型(POD结构体),可以直接在初始化列表里用花括号{}指定它的成员初始值:

修改AlertTrackingState的构造函数:

AlertTrackingState() : mutex(), list(), list_count(0), req_time_ms(0), track{0, 0} {}

这里{0, 0}依次对应track.arrive_time_ms和track.diff_ms的初始值,你可以根据业务需求替换成任意合法的uint64_t数值。

方法2:给TrackCmdTime添加自定义构造函数

如果需要更清晰的初始化逻辑,或者要兼容C++11之前的标准,可以给TrackCmdTime添加构造函数:

首先修改TrackCmdTime的定义:

typedef struct trackcmdtime {
   uint64_t arrive_time_ms;
   uint64_t diff_ms;
   // 带默认参数的构造函数,方便灵活初始化
   trackcmdtime(uint64_t arrive = 0, uint64_t diff = 0) 
       : arrive_time_ms(arrive), diff_ms(diff) {}
} TrackCmdTime;

然后在AlertTrackingState的初始化列表中调用这个构造函数:

AlertTrackingState() : mutex(), list(), list_count(0), req_time_ms(0), track(0, 0) {}

如果用默认参数,甚至可以直接写track()来完成默认初始化。

补充注意

如果不手动初始化track,它的成员会处于未定义的随机值状态(POD类型默认初始化不会自动清零),所以建议始终显式初始化这类成员。另外原代码中的Class应改为小写的class,这是C++的语法要求。


内容的提问来源于stack exchange,提问作者Abhinav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:25:16