c ++ 03:std :: map中内置类型的默认构造函数

Sig*_*erm 5 c++ stdmap c++03

我一直以为代码如下

std::map<int, int> test;
std::cout << test[0] << std::endl;
Run Code Online (Sandbox Code Playgroud)

会打印随机值,因为它会在map中创建单位化值.但是,事实证明,创建的int实际上总是初始化为零,并且标准内置类型在某些情况下也是零初始化的.

问题是:当对标准类型(int/char/float/double/size_t)执行零初始化时?我很确定,如果我int i;在不知名的地方宣布,它将包含随机数据.

PS问题是关于C++ 03标准.问题的原因是,现在我不再确定何时必须为内置类型(如int/float/size_t)提供初始化,或者可以安全地省略它.

Mat*_* M. 9

标准容器(map,vector等等)将始终对其元素进行初始化.

粗略地说,值初始化是:

  • 默认初始化,如果有默认构造函数
  • 否则初始化为零

(有人会说,两全其美)

语法很简单:T t = T();将初始化值t(T t{};在C++ 11中).

当您使用时map<K,V>::operator[],该对的"值"部分是值初始化的,对于内置类型产生0.

  • 我可能**错了,但不是'T t();`一个["最令人烦恼的解析"](http://en.wikipedia.org/wiki/Most_vexing_parse)(即它实际上是正向函数声明,应该是`T t((T()));`或`T t = T();`)? (3认同)