当没有为键分配映射值时调用operator []的行为

coe*_*udo 2 c++ pointers g++ map operators

我有这样的事情:

#include <iostream>
#include <map>

int main() {

    std::map<int, int*> mapaString;
    int* teste = mapaString[0];
    std::cout << teste << std::endl;
    if(!teste)
        mapaString[0] = new int(0);

    std::cout << mapaString[0] << std::endl;
    std::cout << mapaString[1] << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

gcccpluplus.com的文档中,它只是被称为元素的默认构造函数,但是当声明指针而不初始化它时,它的值将是未定义的.

当没有分配给键的映射值并且返回类型是指针时,是否保证在调用下标运算符([])时返回的值将是NULL指针?

小智 10

原始类型(包括指针)的"默认构造函数"产生0填充的内存,很像全局变量.

这是相关的标准语言(来自dcl.init):

默认初始化T类型的对象意味着:

- 如果T是非POD类类型(),则调用T的默认构造函数(如果T没有可访问的默认构造函数,则初始化是错误的);

- 如果T是一个数组类型,则每个元素都是默认初始化的;

- 否则,对象的存储是零初始化的.

...

7一个对象,其初始化程序是一组空的括号,即(),
应默认初始化.

另外,来自lib.map.access:

23.3.1.2地图元素访问[lib.map.access]

reference operator [](const key_type&x);

返回:(*((insert(make_pair(x,T()))).first)).second.