【发布时间】:2011-08-14 12:31:48
【问题描述】:
我是一名新手 C++ 程序员。 我怎样才能找到像 'iomanip' 这样的包含的名称空间(在这种情况下这是正确的词吗?)或任何其他? 使用'std::cout'时,不知道为什么是'std'而不是别的。
我希望我的问题很清楚,值得一问。
PS:我在这里的第一篇文章:)
【问题讨论】:
-
标准库在命名空间std中,所以这很容易。
标签: c++ namespaces include
我是一名新手 C++ 程序员。 我怎样才能找到像 'iomanip' 这样的包含的名称空间(在这种情况下这是正确的词吗?)或任何其他? 使用'std::cout'时,不知道为什么是'std'而不是别的。
我希望我的问题很清楚,值得一问。
PS:我在这里的第一篇文章:)
【问题讨论】:
标签: c++ namespaces include
你是怎么知道 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++ 的早期人们经常使用嵌套类来“模拟”嵌套命名空间,这在当时是不可用的。范围解析语法是一样的。
【讨论】:
ios_base 也是一个类。 iostream 中没有嵌套的命名空间。 std::relops 和 std::placeholders 是我唯一用过的。还有std::this_thread,可能还有一个用于正则表达式的……勇敢的新世界……
ios 的东西都是ios 类中的静态常量。我会记下这一点。很抱歉,感谢您的更正!
它是std,因为cout 等在标准库中,而整个标准库位于std 命名空间中。
其他库可能会有自己的命名空间(例如,Boost 在 boost 命名空间内)。但是您必须查阅相关文档才能了解详细信息!
【讨论】:
为了访问在 iostream 库中声明的函数,我们使用一个命名空间,它不过是属于某个组或家族的标识符(变量名和一些其他类型的名称)的集合。
现在std 是一个命名空间,c++ 标准库中的所有标识符都属于它。
有两种方法可以引用属于命名空间的特定标识符:
std::cout<<"hello";
【讨论】: