将对象的初始值设置为零称为零初始化。
语法:
static T object;
Tt = {} ;
T {} ;
char array [n] = " ";
在以下情况下执行零初始化:
- 对于每个具有静态或线程本地存储持续时间的命名变量,在不进行任何其他初始化之前,将对其进行零初始化,该持续时间不受常量初始化(自C++ 14开始)的影响。
- 对于非类类型和没有构造函数的值初始化类类型的成员,零将被初始化为值初始化序列的一部分。
- 当使用非常短的字符串字面量初始化字符数组时,该数组的其余部分将被零初始化。
零初始化的效果是:
- 如果T是标量类型,则将该对象初始化为通过将整数字面量0转换为T获得的值。
- 如果T是非联合类类型,则将每个非静态数据成员和每个基类子对象初始化为零,并将填充初始化为零位。
- 如果T是联合类型,则对象的第一个非静态命名数据成员将初始化为零,并且填充将初始化为零位。
- 如果T是数组类型,则每个数组元素都将初始化为零。
- 如果T是参考类型,则不执行初始化。
重点:
- 首先对静态变量和线程局部变量进行零初始化,然后按照程序中的指定进行再次初始化,例如,在程序启动时,首先对函数局部静态变量进行零初始化,然后在调用函数时调用其构造函数。第一次输入。如果没有用于声明非类静态变量的初始化程序,则默认初始化不执行任何操作,而更早的零初始化的结果将保持不变。
- 即使空指针的值不是整数零,初始化为零的指针也称为空指针。
下面的程序说明了C++中的零初始化:
// C++ code to demonstrate zero initialisation
#include
#include
struct foo {
int x, y, z;
};
double f[3]; // zero-initialized to three 0.0's
int* p; // zero-initialized to null pointer value
// zero-initialized to indeterminate value
// then default-initialized to ""
std::string s;
int main(int argc, char* argv[])
{
foo x = foo();
std::cout << x.x << x.y << x.z << '\n';
return 0;
}
输出:
000
参考:https://en.cppreference.com/w/cpp/language/zero_initialization
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。