unordered_map MSVC 失效保证
unordered_map MSVC invalidation guarantee
在 https://docs.microsoft.com/en-us/cpp/standard-library/unordered-map-class?view=msvc-160 MS 状态:
"inserting an element invalidates no iterators"
但是 Nicolai Josuttis 和 https://en.cppreference.com/w/cpp/container/unordered_map 所著的《C++ 标准库》一书都指出,如果 insert
导致重新散列,insert
可能会使迭代器无效。
MS只是提供了比标准更强的保证吗?如果是这样,是否允许实现做这样的事情?
谢谢,
马克
是的,每个编译器供应商都必须至少遵守标准的保证,但是如果他们愿意,他们可以自由地提供更有力的保证。例如,所有值得一试的编译器都保证 return 值优化 (RVO) 远早于标准强制要求它。
在 https://docs.microsoft.com/en-us/cpp/standard-library/unordered-map-class?view=msvc-160 MS 状态:
"inserting an element invalidates no iterators"
但是 Nicolai Josuttis 和 https://en.cppreference.com/w/cpp/container/unordered_map 所著的《C++ 标准库》一书都指出,如果 insert
导致重新散列,insert
可能会使迭代器无效。
MS只是提供了比标准更强的保证吗?如果是这样,是否允许实现做这样的事情?
谢谢, 马克
是的,每个编译器供应商都必须至少遵守标准的保证,但是如果他们愿意,他们可以自由地提供更有力的保证。例如,所有值得一试的编译器都保证 return 值优化 (RVO) 远早于标准强制要求它。