我不使用<algorithm>标头,但sort()可用

时间:2018-04-10 18:34:05

标签: c++ header std

#include <iostream>
using namespace std;

int main(int argc, const char * argv[]) {
    int arrr[5] = {21,124,1521,123,1};
    sort(arrr,arrr+5);
    return 0;
}

如上所示,我不使用#include <algorithm>但我可以使用sort()功能!为什么?我不知道。

<iostream>没有#include <algorithm>

请告诉我为什么会这样。

我在Mac OSX上使用Xcode。

2 个答案:

答案 0 :(得分:3)

在C ++中,允许包括任何标准头文件(但当然不需要)与包含任何或所有其他标准头文件具有相同的效果。

在这种情况下,似乎<iostreams>的某些部分实施使用了<algorithm>中的算法,因此您<iostreams>的意图也包含了<algorithm>

当然,您不想依赖于此 - 在不同的实现上,您的代码可能(通常会)失败。即使更新编译器(或者甚至可能只是使用不同的编译器标志),也可能会阻止编译代码。

答案 1 :(得分:1)

是否未指定标准标头是否包含其他标头。不保证标准标头不包含任何其他标准标头。 Standard (draft)引用:

  

[图书馆] / [要求] / [符合]   / [res.on.headers]

     
      
  1. C ++标头可能包含其他C ++标头。 [剪断]
  2.   

所以,std::sort碰巧被宣布,因为它恰好被<iostream>包括在内。但这并不是标准所保证的,也不符合标准。