繁体   English   中英

默认初始化具有许多布尔值的类吗?

[英]Default initialize a class with many boolean values?

注意:我不能使用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”初始化程序?

不,没有更简单的方法,顺便说一句,在初始化布尔变量时使用false而不是0可能更清楚。

无需初始化foobar,如果不初始化,它将使用默认构造函数构造。

有没有办法做到这一点?

我猜你的意思是,有没有办法避免单独初始化每个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”初始化程序?

否。这是带有默认构造函数的类类型。 无论您是显式地对其进行值初始化还是将其保留为默认初始化,都将使用该构造函数。

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?
{ }

它必须工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM