编辑:这个问题不应该被关闭,如果你看看答案,你会发现它们完全不同(旧问题没有提到 C++17)。
我正在阅读一篇 PVS博客文章,其中提到了以下错误。
(减少)
std::map<int,int> m;
m[7]=5;
auto val = 15;
if (!m.contains(val)){
m[val] = m.size(); // bug here
}
根据博客文章,这是错误的。我一直认为 map 的 operator [] 调用是一个函数调用,因此 .size() 在 [] 之前排序,因为函数充当序列点。
那么为什么这是一个错误呢?
注意:我知道自 C++11 以来不存在序列点,但我使用它们是因为新的措辞对我来说更难理解。