为什么rand()编译时不包含cstdlib或使用命名空间std?

Jor*_*que 9 c++ visual-studio visual-c++

按照书我读,rand()需要#include <cstdlib>在C++
但是,我能够编译使用下面的代码rand()没有#include <cstdlib> ,也没有using namespace std;在Visual Studio 2015年
为什么不需要这两个编译?我应该包括cstdlib吗?

C++代码:

#include <iostream>

int main()
{
    std::cout << rand() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

jua*_*nza 8

有两个问题在起作用:

  1. 标准库头文件可能包含其他标准库头文件.所以iostream可能包括cstdlib直接或间接.
  2. cstdlib允许带有C标准库等价物(例如)的头文件将C标准库名称带入全局命名空间,即在std命名空间之外(例如)rand.这是从C++ 11开始正式允许的,并且在很大程度上被容忍了.

  • @JorgeLuque我的意思是例如``iostream`可能包括`utility`,其中可能包含`limits`,其中可能包括`cstdint`,其中可能包含`cstdlib`. (3认同)