编写 C++11 代码在类的头文件中为类成员设置默认值是一种好习惯吗?
或者在类的构造函数中这样做更好?
编辑:
我的意思是:
foo.h:
#include <string>
using std::string;
class Foo{
private:
string greet = "hello";
public:
Foo();
};
VS
foo.cpp(当然有必要的头文件,但没有类内初始化):
Foo::Foo(){
greet = "hello";
}
哪个更好,为什么?
最佳答案
如果一个类成员总是用相同的初始值初始化,那么你应该使初始化器内联,以避免重复。如果初始值依赖于构造函数,则将其放入构造函数初始化列表中。 (并且永远不要像以前那样使用赋值。)
例子:
class Foo
{
bool done = false; // always start like this
int qty;
Bar * p;
public:
Foo() : qty(0), p(nullptr) { }
Foo(int q, Bar * bp) : qty(q), p(bp) { }
explicit Foo(char const * s) : qty(std::strlen(s)), p(new Bar(s)) { }
// ...
};
在这个假设的示例中,成员 done
总是要求以 false
开头,因此最好内联编写初始化程序。另外两个成员,qty
和 p
,可以在三个不同的构造函数中进行不同的初始化,因此它们在构造函数的初始化列表中被初始化。
A curiosum:请注意,提供内联初始化程序会阻止您的类拥有平凡的默认构造函数。
关于c++ - 默认成员值最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11594846/