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)
在gcc和cpluplus.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.