【问题标题】:How do I find the 'namespace keyword' of an included file?如何找到包含文件的“命名空间关键字”?
【发布时间】:2011-08-14 12:31:48
【问题描述】:

我是一名新手 C++ 程序员。 我怎样才能找到像 'iomanip' 这样的包含的名称空间(在这种情况下这是正确的词吗?)或任何其他? 使用'std::cout'时,不知道为什么是'std'而不是别的。

我希望我的问题很清楚,值得一问。

PS:我在这里的第一篇文章:)

【问题讨论】:

  • 标准库在命名空间std中,所以这很容易。

标签: c++ namespaces include


【解决方案1】:

你是怎么知道 cout 存在的?

因为您已经阅读了友好的手册、语言标准、一本好书或在线参考资料。这同样适用于一切:您的文档或参考将告诉您在其中找到类型的命名空间。

通常,作为 C++ 标准库一部分的所有内容都位于 std 命名空间中,但有些东西很可能位于嵌套在其中的命名空间中。嵌套命名空间的显着示例是 std::placeholdersstd::chrono。但是如果您阅读了一篇好的参考资料,告诉您正确的命名空间。

感谢@Potatoswatter:使用相同范围解析语法的其他构造是类的静态常量。例如,类std::ios_base包含一个静态成员类型seekdir,其静态常量值为begcurend;这些可以通过std::ios_base::beg 等访问。或者,由于std::ios 类型继承自ios_base,通过std::ios::beg 等。

在许多方面,只有静态成员的类只是一个美化的命名空间,在 C++ 的早期人们经常使用嵌套类来“模拟”嵌套命名空间,这在当时是不可用的。范围解析语法是一样的。

【讨论】:

  • 谢谢,现在我明白了手册的标题行了。当他们写 'setw' 它的 'std::setw' 时,'ios_base::precision' 是 'std::ios_base ::精度' ...
  • @Pot:谢谢,已修复!另请注意,“宽”与“Unicode”没有任何关系。它与编码无关,意味着“对您的平台来说足够大”。
  • 是的,但我打算避免使用非 Unicode 的任何宽度;v)。此外,在您的修复中,ios_base 也是一个类。 iostream 中没有嵌套的命名空间。 std::relopsstd::placeholders 是我唯一用过的。还有std::this_thread,可能还有一个用于正则表达式的……勇敢的新世界……
  • @Pot:哦,对了,ios 的东西都是ios 类中的静态常量。我会记下这一点。很抱歉,感谢您的更正!
【解决方案2】:

它是std,因为cout 等在标准库中,而整个标准库位于std 命名空间中。

其他库可能会有自己的命名空间(例如,Boost 在 boost 命名空间内)。但是您必须查阅相关文档才能了解详细信息!

【讨论】:

  • 也感谢您的回复 :)
【解决方案3】:

为了访问在 iostream 库中声明的函数,我们使用一个命名空间,它不过是属于某个组或家族的标识符(变量名和一些其他类型的名称)的集合。

现在std 是一个命名空间,c++ 标准库中的所有标识符都属于它。 有两种方法可以引用属于命名空间的特定标识符:

  1. 在程序开头使用 using 语句
  2. 在标识符前面加上命名空间的名称,后跟 2 个冒号,例如std::cout<<"hello";

【讨论】:

    猜你喜欢
    • 2014-04-26
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    相关资源
    最近更新 更多