注意:我不能使用c ++ 11。
我有一个包含许多布尔值和字符串的类。预计将在堆栈上使用。现在我用这个:
class Lorem: public Ipsulum {
public:
Lorem() :
has_foo(0),
is_bar(0),
is_on(0),
is_a_pony(0),
has_car(0),
foorbar() // do I need this line if "foobar" is std::string?
{ }
private:
bool has_foo;
bool is_bar;
bool is_off;
bool is_a_pony;
bool has_car;
std::string foobar;
}
问题1:有没有办法更简单?
问题2:我是否必须在列表中包含“foorbar”初始值设定项?
答案 0 :(得分:3)
不,没有更简单的方法,当你初始化布尔变量时,使用false
而不是0
可能更清楚。
不需要初始化foobar,如果你没有初始化它,它将使用默认构造函数构建。
答案 1 :(得分:3)
有没有办法做到这一点更简单?
我想你的意思是,有没有办法避免单独初始化每个bool
?您可以将它们放在一个结构中,并初始化:
Lorem() : flags() {}
private:
struct Flags {
bool has_foo;
bool is_bar;
bool is_off;
bool is_a_pony;
bool has_car;
} flags;
或将它们包裹在强制价值初始化的东西中
template <typename T> struct value_init {
value_init() : value() {}
T value;
};
value_init<bool> has_foo;
或者可能使用std::bitset
或类似的。
我是否必须在列表中包含“foorbar”初始化程序?
没有。这是一个带有默认构造函数的类类型;无论您是显式地对其进行初始化,还是将其保留为默认初始化,都将使用该构造函数。
答案 2 :(得分:-1)
class Lorem: public Ipsulum {
public:
Lorem() :
has_foo(0),
is_bar(0),
is_on(0),
is_a_pony(0),
has_car(0),
foorbar("") // do I need this line if "foobar" is std::string?
{ }
它必须有效