我很困惑最近的g ++(比如4.8或4.9)应该或不应该引用不同的STL,具体取决于所选的--std选项。具体来说,给定选项--std = c ++ 98 vs --std = c ++ 11,在这种情况下我的代码不应该看/使用两个不同的STL吗?然而,当我使用c ++ 98选项编译时,似乎我仍然得到最新的STL,这显然不起作用,因为它使用了很多只有c ++ 11的东西。我在我的系统上搜索过,只找到了一份STL标题(c ++ 11标题)。任何有关如何工作的说明都表示赞赏。
答案 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)
是的,当然。 功能
但是,实际上,您的实现可能在它们之间共享相同的标准库实现代码,使用宏来打开和关闭功能。海湾合作委员会这样做。