正如cppreference.com所说,
地图通常以红黑树的形式实现。
因此,移动a std::map只是将指针移动到根node+其他信息(例如大小)。为什么std::map移动构造函数未标记为noexcept?
我正在和一个人一起工作std::map<std::string, MyClass* >.
我想测试是否my_map.find(key)返回特定指针.
现在我正在做;
auto iter = my_map.find(key);
if ((iter != my_map.end()) && (iter->second == expected)) {
// Something wonderful has happened
}
Run Code Online (Sandbox Code Playgroud)
但是,operator *迭代器的位置需要返回引用.直觉我认为它是有效的并完全初始化?如果是这样,那my_map.end()->second将是NULL,并且(因为NULL从未预料到),我可以将我的if语句减少为:
if (iter->second == expected)
Run Code Online (Sandbox Code Playgroud)
这是否符合规范?有没有人有实际经验?恕我直言,代码变得更加清晰,可能会实现微小的性能提升.