📜  C++中的零初始化

📅  最后修改于: 2021-05-30 14:32:53             🧑  作者: Mango

将对象的初始值设置为零称为零初始化。

语法

static T object;

Tt = {} ;

T {} ;

char array [n] = " ";

在以下情况下执行零初始化:

  1. 对于每个具有静态或线程本地存储持续时间的命名变量,在不进行任何其他初始化之前,将对其进行零初始化,该持续时间不受常量初始化(自C++ 14开始)的影响。
  2. 对于非类类型和没有构造函数的值初始化类类型的成员,零将被初始化为值初始化序列的一部分。
  3. 当使用非常短的字符串字面量初始化字符数组时,该数组的其余部分将被零初始化。

零初始化的效果是:

  • 如果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等的更多准备工作,请参阅“完整面试准备课程”