2011-02-16 44 views
3

我使用簡單的布爾指針類成員。分配虛假的內容真實的行爲不同 - 請參閱代碼中的註釋。 我沒有註定要測試下面的其他。布爾指針成員行爲不同分配true與假

我使用的編譯器調用g++ -o basic basic.cpp

class Test 
{ 
public: 
    int a; 
    bool* abool; 
}; 


int main() { 
    Test t; 

    //t.abool = false;    // WORKS 
    //t.abool = true;    // ERROR: cannot convert 'bool' to 'bool*' in assignment - expected IMO; 

    // this should work for both values IMO 
    //*(t.abool) = true;   // Segmentation fault 
    //*(t.abool) = false;   // Segmentation fault 



    cout << t.abool << endl; 

    return 0; 
} 
+0

明白了。 thx guys! – groovehunter 2011-02-16 11:53:20

回答

10

這是因爲轉換存在從false0。因此它變爲t.abool = 0;,它正在使用NULL初始化abool。但是,true轉換爲1並且由於您無法使用絕對整數初始化指針,所以會出現編譯器錯誤。在第二種情況下(評論這應該工作國際海事組織),你會得到一個seg錯誤,因爲你試圖取消引用一個單元化的指針調用未定義的行爲。

6

你是bool*尚未初始化指向任何東西。一旦它的指向實際bool對象

bool test; 

t.abool = 0; // or NULL 
t.abool = &test; 

可以bool值賦給:

你可以爲它分配一個空指針值(false將轉換成),或一個有效的指針bool對象通過指針對象:

*t.abool = true; 
*t.abool = false; 
1

作品因爲假大概視爲0由g ++

+0

這裏沒有可能,它是。 – GManNickG 2011-02-16 12:04:55

1

任何數字類型和值爲零的字面值都可以隱式轉換爲空指針。 bool是數字類型,而false的值爲零。非零值(如true)不能隱式轉換爲指針。