我们如何知道std::default_random_引擎需要#include<;随机>;在Visual Studio 2017中? 我是一个C程序员,用Visual Studio 2017在C++中学习OpenCV。在C#中,我们可以调用CTRL+。来使用指令自动激活,只要相应的程序集已经在项目中引用

我们如何知道std::default_random_引擎需要#include<;随机>;在Visual Studio 2017中? 我是一个C程序员,用Visual Studio 2017在C++中学习OpenCV。在C#中,我们可以调用CTRL+。来使用指令自动激活,只要相应的程序集已经在项目中引用,c++,C++,在我正在阅读的一本书中,作者总是显示代码片段,而没有说明必须包含哪些标题。例如,他写道 void salt(Mat& image, int n) { std::default_random_engine generator; // others are removed for the sake of brevity. } 当我找到前缀std时,我总是认为函数必须在iostream中。搜索后,std::default_random_引擎显然位于random头文件中 问题:

在我正在阅读的一本书中,作者总是显示代码片段,而没有说明必须包含哪些标题。例如,他写道

void salt(Mat& image, int n)
{
    std::default_random_engine generator;
    // others are removed for the sake of brevity.
}
当我找到前缀
std
时,我总是认为函数必须在
iostream
中。搜索后,
std::default_random_引擎
显然位于
random
头文件中

问题:
我们如何知道函数存在于哪个标题中(VS 2017)?我怎么知道名称空间
std
除了
iostream
之外还包括
random
,我通常会在上搜索类,它显示必须包含哪些标题


或者,您可以使用静态分析工具,如。

请注意,
是一个标题,在
std
命名空间中没有标识符调用
random
。“我们如何知道函数存在于哪个标题中”-我们在文档中查找它。一个是好地方,另一个是好地方。还有它本身。@godbustbecrazy是的。标准库中的大多数内容都位于命名空间
std
,这意味着您必须使用
std
命名空间(如
std::cout
)对它们进行限定,或者使用命名空间std,不推荐使用
来拉取整个命名空间。您还可以提取单个元素(例如使用std::cout;
)。这避免了标准标识符和您的标识符之间的任何冲突(您可以在
std
之外编写自己的
cout
东西)。头文件和命名空间是正交的。名称空间对编译期间在何处以及如何找到头没有影响。@GodMustBeCrazy谁知道呢。标准头中的任何内容都是实现细节,可以在不同的编译器之间、不同的版本之间、甚至不同的构建配置之间进行更改。如果有一个实际的文件表示它(实现的行为可能与有这样一个文件一样,但实际上依赖于优化的内部表示)。可能是
namespace std
语句隐藏在宏中,或者被混淆了。在我的平台上,它恰好隐藏在一个
\u STD\u BEGIN
宏中。@GodMustBeCrazy请注意,标准标题不是用来读取的。它们对所使用的标识符有限制,可以使用唯一的编译器内部函数,而且几乎任何关注点都比可读性更重要。它们可能很难解析。编辑:这与你写标题时应该做的完全相反,这应该是一种文档形式,而且是很容易理解的。抱歉:为什么在<代码> STD<代码>中没有<代码> IoSturi>代码> >代码>随机<代码>?我真的与C++库的分类混淆了。@ GooStudio BekRZY我从来没有理解如何正确地使用它们的搜索,只要用谷歌搜索一下,前两个点击将会是cppreference和第二个referencepage@GodMustBeCrazy是cppreference上的标准标题列表。com@GodMustBeCrazy对于std::,中每个名称的列表,