C++ 编译器是否为automatic&;提供了不同的默认构造函数;静态对象?
我知道编译器提供的默认构造函数不会初始化类和结构的数据成员。 考虑下面的例子:C++ 编译器是否为automatic&;提供了不同的默认构造函数;静态对象?,c++,default-constructor,C++,Default Constructor,我知道编译器提供的默认构造函数不会初始化类和结构的数据成员。 考虑下面的例子: #include <iostream> struct Test { int a,b; // oops,still uninitialized }; int main() { Test t; // compiler won't initialize a & b std::cout&l
#include <iostream>
struct Test
{
int a,b; // oops,still uninitialized
};
int main()
{
Test t; // compiler won't initialize a & b
std::cout<<t.a<<' ' <<t.b; // a & b has garbage values
}
#包括
结构测试
{
int a,b;//oops,仍然未初始化
};
int main()
{
测试t;//编译器不会初始化a&b
std::cout具有静态存储持续时间的对象总是在任何其他类型的初始化(cf.[basic.start.init])之前初始化为零。具有自动存储持续时间的对象不是。构造函数与此无关。正如我所研究的,类提供了默认构造函数(在任何情况下)因此,创建静态对象或普通对象并不重要。只有一个不同之处是,本地变量的值已经被零初始化。@ Mead:它是对C++标准中描述该行为的部分的引用。
#include <iostream>
struct Test
{
int a,b; // both a & b will be 0 initialized
};
int main()
{
static Test t; // static object
std::cout<<t.a<<' ' <<t.b; // a & b will always be 0 by default
}