【发布时间】:2020-03-30 05:06:51
【问题描述】:
根据 cppreference.com,std::map::operator[] 对不存在的值进行零初始化。
但是,同一个站点没有提到 std::unordered_map::operator[] 的零初始化,但它确实有一个依赖于此的示例。
当然这只是一个参考网站,不是标准。那么,下面的代码可以吗?
#include <unordered_map>
int main() {
std::unordered_map<int, int> map;
return map[42]; // is this guaranteed to return 0?
}
【问题讨论】:
-
@Ælex 您无法可靠地测试某些内容是否已初始化
-
@Ælex 我不太明白,你怎么会有一个未初始化的
std::optional? -
@Ælex 无法测试对象是否已初始化,因为除了初始化之外对未初始化对象的任何操作都会导致未定义行为。不包含任何值的
std::optional对象仍然是已初始化的对象。 -
值对象是值初始化的,而不是零初始化的。对于标量类型,它们是相同的,但对于类类型,它们是不同的。
-
@bolov 我昨天尝试使用 gnu 17 和 std 17 对其进行测试,但奇怪的是我得到的只是零初始化。我以为
std::optionalhas_value会测试它,但它失败了,所以我猜你是对的。
标签: c++ unordered-map zero-initialization