g++ :--std 选项应该更改我的代码使用的 STL/stdlib 吗?

g++ : should --std option change which STL/stdlib my code uses?

我很困惑最近的 g++(例如 4.8 或 4.9)是否应该根据所选的 --std 选项引用不同的 STL。具体来说,给定选项 --std=c++98 vs --std=c++11,在那种情况下我的代码 see/use 不应该是两个不同的 STL 吗?然而,当我使用 c++98 选项编译时,似乎我仍在获取最新的 STL,这显然不起作用,因为它使用了许多仅 c++11 的东西。我在我的系统上搜索过,只找到了一份 STL 头文件(c++11 的)。感谢任何关于它应该如何工作的澄清。

当然可以。 功能上。

但是,在实践中,您的实现可能会在它们之间共享相同的标准库实现代码,使用宏来打开和关闭功能。 GCC 就是这样做的。

如果您打开其中一些 headers,那么您会在 bits/stl_algo.h

中看到类似这样的开关
#if __cplusplus >= 201103L
  /**
   *  @brief  Checks that a predicate is true for all the elements
   *          of a sequence.
   *  @ingroup non_mutating_algorithms
   *  @param  __first   An input iterator.
   *  @param  __last    An input iterator.
   *  @param  __pred    A predicate.
   *  @return  True if the check is true, false otherwise.
   *
   *  Returns true if @p __pred is true for each element in the range
   *  @p [__first,__last), and false otherwise.
  */
  template<typename _InputIterator, typename _Predicate>
    inline bool
    all_of(_InputIterator __first, _InputIterator __last, _Predicate __pred)
    { return __last == std::find_if_not(__first, __last, __pred); }

...

#endif

实现必须为不同的 -std 开关设置维护这些文件的不同副本是荒谬的。