C ++默认初始化

时间:2012-12-22 20:08:31

标签: c++

根据Stanley Lipmann的C ++ Primer(第4版),第50页说:

  

“在任何函数体外定义的变量初始化为0。”

根据我所读到的内容,似乎不是真的。

全局char默认为空白而不是0。

感谢任何帮助。

4 个答案:

答案 0 :(得分:8)

Stanley是正确的 - 具有静态存储持续时间的对象在进行任何其他初始化之前都是零初始化

因此,在您的术语中,全局char “默认”为0。这是整数0字符'0'(通常为48)。当您尝试将其流式传输到控制台时,您将看不到任何内容,因为此char值没有人类可读的表示。

如果您的意思是全局char*char const*,那么这也是“默认”到0,即它将是一个空指针。这 not 与指向空字符串的指针相同。尝试流式传输会导致未定义的行为,所以你什么都看不见,或者你可以看到我的妈妈的番茄汤配方以ASCII艺术翻译层后面20Hz的解释性舞蹈形式呈现。

两者都不是“空白”,虽然不知道“空白”在这里意味着什么但我绝对不能肯定地说。

答案 1 :(得分:6)

试试这个:

#include <iostream>
char global;

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

global这里是一个静态存储持续时间对象,因此将初始化为零 我把它(非常懒惰地)转换成一个整数,这样流就会打印出它的值(而不是字符),只是为了表明它是零。

打印出char'\ 0'不打印任何有用的东西。

答案 2 :(得分:3)

'0'不是0。当它声明初始化为0 时,它表示值0(也是\0NULL),而不是字符'0'(这是用ASCII码编码48。

答案 3 :(得分:0)

这本书似乎让很多人感到困惑。发现这回答stackoverflow-question:

Default initialization confusion