2010-10-02 41 views
9

假設我有一個名爲foo_boolean該結構包含一些布爾值未初始化的布爾值默認值:這將是在C++中

struct foo_boolean { 
    bool b1; 
    bool b2; 
}; 

如果我定義類型foo_boolean的變量沒有初始化它,會出現什麼成員變量的默認值是? (即真假,或兩者的隨機值)。

+3

爲了記錄,該單詞的正確拼寫是*布爾*。 – avakar 2010-10-02 11:19:33

回答

14

這取決於你如何創建它。如果結構由默認初始化例如

void foo() { 
    fool_boolen x; // <--- 

那麼值將不確定(如果設定值前閱讀它不好的事情會發生)。另一方面,如果該結構由值初始化構建,則零初始化例如,

fool_boolen x; // <-- 

void foo2() { 
    static fool_boolen y; // <-- 
    fool_boolen z = fool_boolen(); // <-- 

則這些值將是零,即

1

如果你的意思是bool初始值是未知

+0

它是已知的 - 無論是真的還是假的,但未定義 – 2010-10-02 11:43:22

+1

@Chris不,它甚至不保證bool有任何價值。它可能包含一個表示既非真也非假的位模式。 – 2010-10-02 14:50:34

+0

@Johannes:是的,在我寫評論之後,我讀到了提及標準的答案。找到使這成爲可能的架構會很有趣。 – 2010-10-04 07:42:58

9

bool的值將不確定。它會在堆棧之前的任何其他地方,如果以前沒有使用它,它有時會被清零。

但同樣,它是未定義的,這意味着它可以是真或假。

如果你需要一個默認值,你可以這樣做:

struct fool_bool { 
    bool b1; 
    bool b2; 
    fool_bool() { 
    b1 = true; 
    b2 = false; 
    } 
}; 

這使得B1默認爲真,假B2。

0

它會產生隨機數,爲什麼?因爲我使用g ++測試它:

#include <iostream> 

using namespace std; 

struct fool_bool 
{ 
    bool a; 
bool b; 
}; 

int main(int argc, char **argv) 
{ 
fool_bool fb1; 
cout << fb1.a << " : " << fb1.b << endl; 
} 

第一測試拿給我121,235和第二個給我看,34,331 所以這將是容易弄清楚!

+4

你的編譯器是否改變你的':'爲','? – Default 2010-10-02 11:26:08

+0

很遺憾,這篇文章已經得到很多反對票。雖然沒有清楚說明,但通過顯示該值不確定來回答OP的問題。雖然一些解釋會很好,但他的回答是正確的。 – psyklopz 2014-07-18 16:43:41

-2

按照我的理解,

如果u聲明,則值應被初始化爲假的對象作爲全局或靜態。

否則,值不會被初始化(基本上可能是真/假)。

+0

爲什麼當它被聲明爲全局或靜態時,它會被初始化爲false? – 2010-10-02 11:21:45

+2

@海原:標準規定「靜態或線程存儲時間爲零的對象初始化」。 – aeh 2010-10-02 11:25:53

+0

正如@ MBZ的回答中所述,這是不正確的。布爾值可以是「未知」,即既不是真也不是假。其實我直到幾分鐘前觀察它才知道這一點。比較這樣一個布爾與真或假總是返回true(雖然我不知道它是否指定或依賴於編譯器)。很奇怪! – lex82 2015-08-31 13:53:11

4

來自標準文檔,3.9.1.6。

Values of type bool are either true or false.47)

47)

Using a bool value in ways described by this International Standard as 「undefined,」 such as by examining the value of an uninitialized automatic variable, might cause it to behave as if it is neither true nor false.

所以,這是不確定的..

-1

在VS 2012,你會遇到錯誤C4700如果你沒有初始化的布爾變量:uninitialized local variable 'temp' used

然而,在2005年VS它可以讓你建立,但運行過程中,你會遇到這樣的錯誤:Run-Time Check Failure #3 - The variable 'a' is being used without being defined.