【问题标题】:Is inserted value of pointer type by operator[] in map always NULL? [duplicate]map 中 operator[] 插入的指针类型的值是否始终为 NULL? [复制]
【发布时间】:2016-11-10 03:20:36
【问题描述】:

以下代码的预期行为是什么,

#include <map>
...
std::map<int, A *> myMap;
myMap[0];
if(myMap[0] == NULL) {// true or false?
}

if 语句的计算结果是否为真?

【问题讨论】:

  • NULL 应该读作nullptr 吗?还有为什么不使用智能指针
  • 该代码什么也不做,因为它不能编译。输入正确的标题,因为map 可能是某人的自制地图。
  • @EdHeal,它是公司的一些遗留代码,我们正在使用遗留编译器.. xD
  • 如果您想避免在地图中输入无效数字,请使用find() 进行搜索,使用insert() 而不是[] 进行新输入。
  • @SauravSahu,我同意这一点。它将提高代码的健壮性,但由于办公室的 SE 实践非常差,我不允许更改不属于我的代码。

标签: c++ pointers dictionary initialization stdmap


【解决方案1】:

插入的值将被初始化为空指针。

std::map::operator[] 将在 key 不存在时执行插入;映射的值为value-initialized,指针类型为zero-initialization,这会导致空指针。

顺便说一句:最好使用nullptr(C++11 起)而不是NULL

【讨论】:

  • 这是由于我在公司工作时遇到的一些限制。我们仍在使用 C++98 标准。最新 C++ 的许多功能都缺失了。例如智能指针...>
  • 感谢您的回答,我会尽快接受 =)
猜你喜欢
  • 2011-06-22
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2010-11-23
  • 1970-01-01
相关资源
最近更新 更多