新手在这里,为了帮助解决我的C ++项目中的问题,我正在使用g ++中的-Weffc ++选项进行编译。
它给了我数百个关于“警告......应该在成员初始化列表中初始化”的警告
这真的是必要的,因为它会a)花一些时间把它们全部写进来,并且b)当我很乐意在只需要时初始化变量时,让事情变得更加混乱。
但更具体地说,我如何初始化std :: vector?
是这样的,即只是在括号中加0? 我的标题:
class Blade;
class Postpro {
public:
Postpro(string fName) : theFileName(fName),
blade(NULL),
sizes(10),
t(std::vector<double>(0){};
~Postpro(){};
void test();
private:
string theFileName;
Blade* blade;
int sizes;
std::vector<double> t;
}
然后在cpp中,如果我想使用它,我只需调整矢量大小?
void Postpro::test() {
blade = new Blade;
t.resize(37);
}
由于
答案 0 :(得分:4)
键入时间不会太长,因为键入的内容过多:
而不是
t(std::vector<double>(0))
你可以写
t(0)
应该与
相同t()
警告可能有点过于迂腐。无论如何,具有默认构造函数的类将自动初始化。警告标志仅提醒您未初始化的POD成员似乎更有价值(否则您会得到太多噪音)。
可能是因为它向读者显示您确实打算使用默认构造函数来初始化该成员。
答案 1 :(得分:2)
零可能是矢量的有效值,但我从未见过它。
你真的不必提供任何值,因为vector有一个默认的构造函数。只需t()
即可。
警告只是一个警告,无论如何都会调用向量的默认构造函数。
答案 2 :(得分:1)
您可以按照这样做的方式执行此操作,但没有意义 - 默认构造函数执行完全相同的工作。最好使用初始化列表,但是如果它导致不可读或不必要的复杂代码,那么在构造函数体中初始化(更准确地说,从默认值重置它们)成员变量是完全没错的。