根据我正在阅读的书,rand()
在C ++中需要#include <cstdlib>
但是,我能够编译以下代码,在Visual Studio 2015中使用rand()
而不使用#include <cstdlib>
或using namespace std;
。
为什么这两个不需要编译?我应该包含cstdlib吗?
C ++代码:
#include <iostream>
int main()
{
std::cout << rand() << std::endl;
}
答案 0 :(得分:8)
有两个问题在起作用:
iostream
可能直接或间接包含cstdlib
。cstdlib
)的头文件将C标准库名称带入全局命名空间,即std
命名空间之外(例如rand
自从C ++ 11以来,这是正式允许的,并且之前在很大程度上被容忍了。答案 1 :(得分:4)
iostream
可能直接或间接包含cstdlib
。这会在范围中显示std::rand()
和::rand()
。你正在使用后者。
但是,如果您想使用cstdlib
,那么您不应指望这一点并始终包含rand
。在C++
代码中不使用rand
,有更好的方法可以生成随机数。
答案 2 :(得分:2)
您绝对应该使用相关的包含文件来代码中使用的内容。当您将编译器/库更新到新版本时,它可以免除意外。我认为在std::
前添加rand
比使用using namespace std;
要好得多 - 但无论哪种方式,最好不要依赖它而不使用命名空间,尽管如此往往是它在大多数地方的工作方式,以允许C代码向后兼容。