是std :: map <int,void * =“”>确保空键返回NULL?</int,>

时间:2014-08-26 03:26:26

标签: c++

我的代码如下,我在MSVC2010中尝试过它可以正常工作。

std::map<int, int*> fooMap;
assert(fooMap[1] == null);

C ++标准是否保证断言不会永远失败?

感谢。

4 个答案:

答案 0 :(得分:2)

使用std::map函数插入operator[]时,数据将为value initialized,指针的值初始化将使它们为零(即空指针)。

答案 1 :(得分:1)

来自http://en.cppreference.com/w/cpp/container/map/operator_at

  

返回对映射到等效于key的键的值的引用,如果此类键尚不存在则执行插入。

     

如果执行插入,则映射值是值初始化的(默认为类类型构造,否则为零初始化),并返回对它的引用。

答案 2 :(得分:1)

可以回答两个答案:

如果您想要在没有创建密钥的情况下验证密钥为空,那么最好与itterator进行核对:map.find(KEY) != map.end()

如果您想为地图中的某个键创建一个空行,就像您指定它一样map[KEY]

答案 3 :(得分:0)

鉴于您已经展示的两行代码,该断言永远不会触发。