基本C++类型何时具有未知的初始值?

Dre*_*ann 4 c++ standards initialization built-in-types

基本的C++类型(例如intor)何时会有float未知的初始值?

内存分配的类型如何影响,如果有的话?宣言怎么样?如果它是什么的一员class/ struct/ union?C++ 11与C++ 03或C++ 98有什么不​​同?

我怀疑,但不知道我的知识是否完整(或者说是正确的)

Mat*_*son 7

任何POD数据(包括所有基本类型)都将具有未知值:

  • 它没有静态内存分配(而是在堆栈上创建或者使用new)
  • 它未初始化,包括空初始化和/或构造函数初始化列表

所有类型的全局/静态变量在main调用之前作为启动过程的一部分设置为零.构造函数在main 1之前被调用为具有构造函数的类型.

在构造函数中未初始化的任何内容也是未知的.

编辑:澄清,std::string是"构造函数不初始化所有内容"的一个很好的例子 - 如果你有一个本地std::string str;,那么str将有一个定义的"空字符串"内容,但实际缓冲区的内容,或者实际上缓冲区指向的内容可能是根本没有设置任何有意义的东西 - 因为一旦我们开始使用字符串来存储东西,实现可以根据长度[或其他方式]确定是否有可用的缓冲区.

Edit2:正如评论所解释的那样,你也可以有"混合"的情况,其中一些结构的部分正在被初始化,例如struct,它包含一些"普通数据"元素和一些具有构造函数的元素.具有构造函数的构造函数将被调用.普通数据不会被初始化.

1运行构造函数的代码可能是"main"函数的一部分或从"main"函数内部调用 - 但如果是这种情况,它将"在main中的任何代码启动之前".