假設我有一個名爲foo_boolean該結構包含一些布爾值未初始化的布爾值默認值:這將是在C++中
struct foo_boolean {
bool b1;
bool b2;
};
如果我定義類型foo_boolean的變量沒有初始化它,會出現什麼成員變量的默認值是? (即真假,或兩者的隨機值)。
假設我有一個名爲foo_boolean該結構包含一些布爾值未初始化的布爾值默認值:這將是在C++中
struct foo_boolean {
bool b1;
bool b2;
};
如果我定義類型foo_boolean的變量沒有初始化它,會出現什麼成員變量的默認值是? (即真假,或兩者的隨機值)。
這取決於你如何創建它。如果結構由默認初始化例如
void foo() {
fool_boolen x; // <---
那麼值將不確定(如果設定值前閱讀它不好的事情會發生)。另一方面,如果該結構由值初始化或構建,則零初始化例如,
fool_boolen x; // <--
void foo2() {
static fool_boolen y; // <--
fool_boolen z = fool_boolen(); // <--
則這些值將是零,即假。
如果你的意思是bool
初始值是未知。
它是已知的 - 無論是真的還是假的,但未定義 – 2010-10-02 11:43:22
@Chris不,它甚至不保證bool有任何價值。它可能包含一個表示既非真也非假的位模式。 – 2010-10-02 14:50:34
@Johannes:是的,在我寫評論之後,我讀到了提及標準的答案。找到使這成爲可能的架構會很有趣。 – 2010-10-04 07:42:58
bool
的值將不確定。它會在堆棧之前的任何其他地方,如果以前沒有使用它,它有時會被清零。
但同樣,它是未定義的,這意味着它可以是真或假。
如果你需要一個默認值,你可以這樣做:
struct fool_bool {
bool b1;
bool b2;
fool_bool() {
b1 = true;
b2 = false;
}
};
這使得B1默認爲真,假B2。
它會產生隨機數,爲什麼?因爲我使用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 所以這將是容易弄清楚!
按照我的理解,
如果u聲明,則值應被初始化爲假的對象作爲全局或靜態。
否則,值不會被初始化(基本上可能是真/假)。
來自標準文檔,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.
所以,這是不確定的..
在VS 2012,你會遇到錯誤C4700如果你沒有初始化的布爾變量:uninitialized local variable 'temp' used
然而,在2005年VS它可以讓你建立,但運行過程中,你會遇到這樣的錯誤:Run-Time Check Failure #3 - The variable 'a' is being used without being defined.
爲了記錄,該單詞的正確拼寫是*布爾*。 – avakar 2010-10-02 11:19:33