如何通过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
相关产品推荐
相关产品推荐

