在C/C++中,为什么全局变量和静态变量初始化为默认值?
为什么不留下垃圾值呢?这有什么特别的原因吗?
请考虑以下代码:
#include <iostream>
struct A{ // with implicit default constructor
int number;
};
struct B{
int number;
B(){}; // user-provided default constructor
};
int main()
{
A aa = {};
B bb = {};
std::cout << "aa.number: " << aa.number << std::endl;
std::cout << "bb.number: " << bb.number << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
在线运行代码会 产生以下输出:
aa.number: 0
bb.number: 19715
Run Code Online (Sandbox Code Playgroud)
为什么 bb.number 未初始化?我认为使用 ={} 可以保证零初始化?
如果我在这段代码中有一个全局静态变量x
#include <stdio.h>
#include <stdio.h>
static int x;
int main(void)
{
DO SOMETHING WITH x HERE
x++;
}
Run Code Online (Sandbox Code Playgroud)
如果我选择将x初始化为一个值,那将会有所不同
static int x = 0;
Run Code Online (Sandbox Code Playgroud)
在进入"主要"之前?
在我的第一种情况下,我没有为x赋值,编译器是否隐式知道x要设置为零,因为它是一个静态变量?我听说我们可以用静态变量做到这一点.
非常感谢...