当前位置: 首页 > 知识库问答 >
问题:

如果导入了iostream,为什么要使用名称空间

岳浩宕
2023-03-14

我是C的初学者,最近我被介绍过std这样的名称空间。但是,如果像cout和endl这样的函数是在iostream头文件中定义的,为什么还要包含std名称空间呢?或者这些函数实际上是在std名称空间中定义的?如果是这样,那么为什么要包含iostream文件呢?

共有3个答案

常明亮
2023-03-14

如果你使用的是使用命名空间std,你就不必d::c了。在这种情况下,写cout就足够了。

顾靖
2023-03-14

名称空间和#include指令是不同的:

当你包含一个头文件(比如iostream)时,你告诉预处理器处理文件的内容,就像那些内容在包含文件出现的地方出现在源程序中一样。

为什么要使用包含而不是直接抛出代码?

发件人:http://www.cplusplus.com/forum/articles/10627/

(1) 它加快了编译时间。随着程序的增长,代码也在增长,如果所有内容都在一个文件中,那么每次进行任何小的更改时,都必须完全重新编译所有内容。对于小型程序来说,这似乎不是什么大不了的事情(事实并非如此),但当您有一个合理大小的项目时,编译整个程序可能需要几分钟的时间。你能想象每一次小的改变都要等那么久吗?

编译/等待8分钟/“哦,糟了,忘了一个分号“/编译/等待8分钟/调试/编译/等待8分钟/等等

(2) 它让你的代码更有条理。如果你把概念分解成特定的文件,当你想修改的时候(或者只是看看它来记住如何使用它和/或它是如何工作的),你会更容易找到你想要的代码。

(3)它允许您将接口和实现分开。如果您不明白这意味着什么,不要担心,我们将在本文中看到它的作用。

另一方面,命名空间允许您在一个作用域下对类和函数进行分组。它们提供了一种避免这些实体之间名称冲突的方法,而不需要处理嵌套类。

国阳
2023-03-14

一个C文件可以有一个名称空间,不同的C文件可以有相同的名称空间。

// Header1.h
namespace SomeScope
{
  extern int x;
}

// Header2.h
namespace SomeScope
{
  extern int y;
}

// Some CPP file
#include "Header1.h" // access to x
SomeScope::x = 5;

#include "Header2.h" // access to y
SomeScope::y = 6;

我希望这有帮助。名称空间就像一个存储各种标识符的地方,以避免名称冲突SomeScope::x与另一个Scope::x是完全不同的x标识符。

 类似资料:
  • 问题内容: 什么是PHP命名空间? 一般而言,命名空间是什么? 一个有例子的Layman答案会很棒。 问题答案: Namespacing对函数和类起作用,而作用域对变量起作用。它允许您在同一程序的不同部分中使用相同的函数或类名称,而不会引起名称冲突。 简单来说, 将名称空间视为一个人的姓氏 。如果有两个人名为“ John”,则可以使用他们的姓氏来区分他们。 场景 假设您编写了一个使用名为的函数的应

  • 问题内容: 实际上,这完全是理论上的问题。但是有趣的是,为什么Java规范不允许在包中使用大写字母,并导致这样写: 代替 问题答案: 直接从Oracle Docs 包名称以小写形式编写,以避免与类或接口的名称冲突。

  • 问题内容: 我刚刚开始学习Python,并在Python中遇到了 “命名空间” 概念。虽然我了解了它的本质,但无法理解这个概念的严重性。 网上的一些浏览显示,反对PHP的原因之一是它没有对名称空间的本地支持。 有人可以解释如何使用名称空间以及此功能如何使编程更好 (不只是在Python中,因为我假设名称空间的概念不限于特定语言)。 我主要来自Java和C编程背景。 问题答案: 命名空间是一种实现范

  • 问题内容: Angular对于构建单页应用程序非常有用。它基本上建立在当前范例上,在该范例中我们向不同的端点发出请求,以帮助我们创建更好的单页应用程序。 另一方面,我们拥有的Meteor似乎更加强大,特别是因为它们具有称为DDP的功能,该功能基本上允许双向数据流。看来Meteor是Angular的超集,并且显然是更好的选择。 尽管Angular确实提供了一些诸如测试和本地化之类的功能,但我只是不明

  • 问题内容: 这两行之间的主要区别是什么: 和 当我使用第一行时,我得到一个错误:而且我不太确定为什么会收到此错误?第二行似乎已解决了该问题。 问题答案: 如果您使用: 这意味着ArrayObject是在当前名称空间中定义的。您可以在全局名称空间(当前作用域中未定义名称空间)中,或者在与当前作用域相同的名称空间中定义ArrayObject时,使用此语法(示例)。 如果您使用: 这意味着ArrayOb

  • 问题内容: 据我所知,如果字体包含空格,则需要使用双引号或单引号,例如: 但是在Google字体上,我也看到了 有些人甚至这样使用它: 我觉得这很奇怪,因为以下方法也可以: 那么CSS中字体名称周围引号的正确用法是什么? 问题答案: 您可以随时把一个特定的字体系列名称在引号,双或单,所以,和是等价的。仅CSS定义的通用字体系列之类的名称必须不带引号。 与流行的看法相反,字体名称由空格分隔的名称组成