【发布时间】:2020-10-29 13:05:21
【问题描述】:
我试过这个:
std::map<int,int> m;
它起作用了——m 变成了一张空地图。但是,如果编译器默认选择不将 m 初始化为空映射,则此方法可能不起作用。更好的解决方案?
【问题讨论】:
-
这将始终创建一个空地图。这就是地图的默认构造函数所做的。
-
如果您的编译器没有发出调用
m的构造函数的代码,那么您的编译器将无法修复 -
我怀疑这么多反对票的原因是您自己很容易发现这一点。当你有这样的问题时,我建议参考 cppreference,你会发现大多数答案都可以在那里找到:)
-
@Eric 好问题。在 C 中,“int x”可能会根据 x 是本地的、全局的还是编译器上的 x 产生不同的值,对吧?但这似乎毕竟不是一个明显的问题,例如询问局部变量的默认值是 Java 面试中的一个问题。
-
@zell 您正在谈论未定义行为的未初始化变量。但是,一旦实例化对象,它们总是会根据它们的构造函数进行初始化。如果你不提供一个,编译器会为你生成一个默认的。