c++默认初始化

C++ default initialization

本文关键字:初始化 默认 c++      更新时间:2023-10-16

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

"在函数体之外定义的变量初始化为0。"

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

全局char默认为空,不为0。

感谢您的帮助。

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

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

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

都不会是"blank",尽管在不知道"blank"是什么意思的情况下,我不能绝对肯定地说。

试试这个:

#include <iostream>
char global;
int main()
{
    std::cout << "Value of Global " << ((int)global) << "n";
}

global在这里是一个静态存储时间对象,因此将被初始化为零。
我将它(非常惰性地)强制转换为一个整数,这样流将打印出它的值(而不是字符),只是为了显示它是零。

打印出字符''不会打印任何有用的东西。

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