我是新手C ++程序员。 我怎样才能找到像'iomanip'或其他任何一个包含的名称空间(在这个上下文中这是正确的单词吗?)? 当使用'std :: cout'时,我不知道为什么它是'std'而不是别的。
我希望我的问题很清楚,值得一提。
PS:我在这里的第一篇文章:)
答案 0 :(得分:5)
你怎么知道cout
首先存在?
因为您已阅读友好手册,语言标准,好书或在线参考。这同样适用于所有内容:您的文档或参考文件将告诉您找到类型的命名空间。
通常,C ++标准库中的所有内容都在std
命名空间中,但有些内容可能位于嵌套在其中的命名空间中。嵌套命名空间的显着示例是std::placeholders
和std::chrono
。但是,如果您阅读了一个好的参考文献,将告诉正确的名称空间。
感谢@Potatoswatter:使用相同范围分辨率语法的其他构造是类的静态常量。例如,类std::ios_base
包含静态成员类型seekdir
,其静态常量值为beg
,cur
和end
;可以通过std::ios_base::beg
等访问这些内容。或者,因为类型std::ios
继承自ios_base
,通过std::ios::beg
等。
在许多方面,只有静态成员的类只是一个美化的命名空间,在C ++的早期,人们经常使用嵌套类来“模拟”当时不可用的嵌套命名空间。范围分辨率语法相同。
答案 1 :(得分:2)
它是std
,因为cout
等位于标准库中,整个标准库位于std
命名空间内。
其他库可能有自己的命名空间(例如Boost在boost
命名空间内)。但您必须查阅相关文档以了解详细信息!
答案 2 :(得分:2)
要访问iostream库中声明的函数,我们使用一个名称空间,它只是属于一个组或系列的标识符(变量名和一些其他类型的名称)的集合。
现在std
是命名空间,c ++标准库中的所有标识符都属于它。
有两种方法可以引用属于命名空间的特定标识符:
std::cout<<"hello";