2015-04-03 48 views
1

注:我不能使用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

@πάνταῥεῖ不是「默認」,只有自C++ 11以來纔可用? – user10607 2015-04-03 10:16:09

+0

@πάνταῥεῖ不,這是完全錯誤的(除了'foobar'。) – juanchopanza 2015-04-03 10:17:05

+0

@ user10607您說得對,pre C++ 11此行爲不能保證。沒有簡單的方法,適當地初始化值。 – 2015-04-03 10:21:58

回答

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」初始值設定項?

不。這是一個具有默認構造函數的類類型;無論您是否明確賦值 - 初始化該構造函數,還是將其設置爲默認初始化,都將使用該構造函數。

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

它必須工作

+1

OP沒有聲明它不起作用? – 2015-04-03 10:23:11

+0

問題是,代碼可以變得更簡單嗎?你做得稍微複雜一些。 – 2015-04-03 11:14:08

3

沒有,有沒有更簡單的方法,通過它可能更清晰的方式來使用false,而不是0,當你初始化的布爾變量。

沒有必要對foobar進行初始化,如果不初始化它,它將使用默認構造函數構造。