12

我正在使用gcc 4.8.1,经过数小时调试一个可怕的神秘性能问题后,我发现它std::list::size实际上是作为对std::distance.

/**  Returns the number of elements in the %list.  */
      size_type
      size() const _GLIBCXX_NOEXCEPT
      { return std::distance(begin(), end()); }

这让我感到惊讶,因为参考资料说std::list::size的复杂性应该是恒定std::distance的,而std::list::iterator.

我真的很困惑,因为我认为 gcc 对 C++11 特性有很好的支持,而且我认为他们没有理由不实现这个。

这是参考还是 gcc 中的错误?

在后一种情况下:

有什么理由为什么这么久会丢失这样一个基本的 C++11 功能?

是否有第三种可能性,例如:

我可以有 gcc 4.8.1 但有一些旧版本的标准库吗?

4

1 回答 1

10

这不完全是一个错误,您可以在这里阅读:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49561

这更像是与旧版本的 gcc 兼容的情况。看起来他们真的不想添加额外的“数据成员”。

报价:

此补丁使 c++98 和 c++11 代码不兼容,并对发行版造成严重问题。

patch是他们为 gcc 4.7 实施的修复程序(其中是 O(1))。

另一个引用:

维护 ABI 兼容性对于当前版本更为重要

于 2013-10-03T08:27:22.310 回答