C++ C'tor 不初始化字段?

问题描述

在 C++11 中我写道:

JobsList::JobEntry::JobEntry(pid_t pid,pid_t jid,const string &cmd,bool is_stopped) : pid(pid),jid(jid),cmd(cmd),is_stopped(is_stopped) {
    time(&insertion_time);
}

但是编译器一直给我警告:

Clang-Tidy: Constructor does not initialize these fields: insertion_time

我怎样才能摆脱这个并初始化 in_time?

解决方法

您有一个初始化列表,其中没有初始化 insertion_time

在构造函数的主体中,字段初始化之后,您通过调用 insertion_time 设置 time() 的值。

Clang-Tidy 然后会警告您该字段尚未初始化但正在使用中。

您可以使用以下内容对其进行初始化:

 JobsList::JobEntry::JobEntry(pid_t pid,pid_t jid,const string &cmd,bool is_stopped) : pid(pid),jid(jid),cmd(cmd),is_stopped(is_stopped),insertion_time(0) {
    time(&insertion_time);
}

编辑:

您可以在初始化列表中使用 time(),但不能使用 time(&insertion_time)。您必须改为调用 insertion_time(time(nullptr))time() 函数返回正确的值:

JobsList::JobEntry::JobEntry(pid_t pid,insertion_time(time(nullptr)) {
}
,
time_t time (time_t* timer);

所以 time 返回一个 time_t

JobsList::JobEntry::JobEntry(pid_t pid,insertion_time(time(nullptr)) {
}