2012-12-22 79 views
1

根據C++入門(第四版)斯坦利李普曼,50頁,它說:C++默認初始化

「任何在函數體外部定義的變量初始化爲0」。

根據我看過的內容,它似乎並不正確。

全局char默認爲空,而不是0

希望得到任何幫助。

+2

「0」沒有字符代碼0.字符代碼0爲空(至少在ASCII中,不確定是否有任何偏離)。 – chris

+0

你是什麼意思'全局字符默認爲空白? –

+0

@LightnessRacesinOrbit當他打印出一個未初始化的char變量時,它會變成空白。 – 0x499602D2

回答

6

試試這個:

#include <iostream> 
char global; 

int main() 
{ 
    std::cout << "Value of Global " << ((int)global) << "\n"; 
} 

global這裏是一個靜態的存儲持續時間對象,因此將被初始化爲零。
我把它(很懶惰地)轉換爲一個整數,以便流打印出它的值(而不是字符),以表明它爲零。

打印字符'\ 0'不會打印任何有用的東西。

+0

打印出char''\ - ''是未定義的行爲,除非流是以二進制模式打開的(這不是'std :: cout'的情況)。 –

3

'0'不是0。當它聲明初始化爲0時意味着值0(也是\0NULL),而不是字符'0'(它是48位ASCII編碼)。

8

斯坦利是正確的— 具有靜態存儲持續時間的對象在任何其他初始化發生之前都是零初始化的

因此,在您的術語中,全球的char「違約」到0。這是整數0,而不是字符'0'(通常是48)。當您嘗試將其流式傳輸到控制檯時,您將看不到任何內容,因爲此值不具有人類可讀的表示形式。

如果您的意思是全球char*char const*,那麼這也是「默認」爲0,即它將是空指針。這是而不是與指向空字符串的指針相同。嘗試流式傳輸會導致不確定的行爲,所以你什麼也看不到,或者你可以看到我的媽媽的番茄湯配方以20Hz的解釋性舞蹈形式出現在ASCII藝術翻譯層之後。

雖然不知道「空白」是什麼意思,但我不能絕對確定地這樣說,它們都不會「空白」。