【发布时间】:2019-10-16 08:07:46
【问题描述】:
以下崩溃:
std::map<std::string, int> m1{ {"0", 0}, { "1", 1 }};
// auto melem = m1["0"]; // OK
auto melem = m1[0];
为什么会这样?
【问题讨论】:
-
0不是字符串。您为什么希望它起作用? -
为什么它不应该崩溃?对于给定的地图,
operator[]的参数必须为key_type类型。 -
basic_string( const CharT* s,const Allocator& alloc = Allocator() );:构造字符串,其内容初始化为 s 指向的以空字符结尾的字符串的副本。字符串的长度由第一个空字符确定。 如果 [s, s + Traits::length(s)) 不是有效范围(例如,如果 s 是空指针),则行为未定义.
-
@MatthieuBrucher 回答低于欢呼
-
@mkrieger1 公平地说,这样的“崩溃”在逻辑上是不可预料的。