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

时间:2015-02-05 19:04:50

标签: c++ c++11 gcc stl g++

我很困惑最近的g ++(比如4.8或4.9)应该或不应该引用不同的STL,具体取决于所选的--std选项。具体来说,给定选项--std = c ++ 98 vs --std = c ++ 11,在这种情况下我的代码不应该看/使用两个不同的STL吗?然而,当我使用c ++ 98选项编译时,似乎我仍然得到最新的STL,这显然不起作用,因为它使用了很多只有c ++ 11的东西。我在我的系统上搜索过,只找到了一份STL标题(c ++ 11标题)。任何有关如何工作的说明都表示赞赏。

2 个答案:

答案 0 :(得分:4)

如果你打开其中的一些标题,那么你会在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切换设置维护这些文件的不同副本,这是荒谬的。

答案 1 :(得分:1)

是的,当然。 功能

但是,实际上,您的实现可能在它们之间共享相同的标准库实现代码,使用宏来打开和关闭功能。海湾合作委员会这样做。