什么是命名空间污染?

2023-12-27

“命名空间污染”一词是什么意思?为什么将方法设为静态有助于防止它?

这个问题 https://stackoverflow.com/questions/8862665/what-does-it-mean-global-namespace-would-be-polluted似乎很相似,但具体与 JavaScript 相关,并且答案没有定义该术语。


命名空间就是名称存在的空间(现在看起来很明显)。

假设您有两段代码,一段用于处理链表,另一段用于处理树。现在这两段代码都将受益于getNext()函数,协助遍历数据结构。

然而,如果他们both使用相同的名称定义该函数,可能会发生冲突。当您输入以下代码时,编译器会做什么?

xyzzy = getNext (xyzzy);

换句话说,哪个getNext()你真的想用吗?有很多方法可以解决这个问题,例如使用面向对象的代码,您可以使用:

xyzzy = xyzzy.getNext();

由于您通过变量指定了类型,这会自动神奇地选择正确的类型xyzzy itself.

但是,即使使用大部分面向对象的代码,也可能会出现冲突,这就是命名空间发挥作用的地方。它们允许您将名称放置在自己的区域中以便区分它们。

作为一个例子,C++ 将其所有标准库内容放入std命名空间。如果由于某种原因,您需要fopen() or rand()功能与库中的功能不同,您可以将其放在您的own命名空间以将它们分开。

现在描述命名空间clashes.从技术上讲,命名空间污染只是将符号留在不应该存在的名称空间中。这并不一定会导致冲突,但会增加发生冲突的可能性。


使方法静态(在类 C 语言中)的原因与给定翻译单元之外的世界可用的名称有关(例如,在链接时)。用代码:

int get42 (void) { return 42; }
int main (void) { return get42(); }

both这些函数中的一部分可供链接器使用。

除非你有需要打电话get42()从其他地方,使其静态:

static int get42 (void) { return 42; }
int main (void) { return get42(); }

将防止它污染链接器维护的命名空间 - 在 C 中,应用static文件级对象或函数的限定符给出了它internal连锁。

它与 C++ 命名空间类似,您可以拥有static int get42()四百内不同的源文件,它们不会互相干扰。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是命名空间污染? 的相关文章

  • 命名空间中的特殊字符

    我正在考虑在自定义框架的命名空间中使用带有变音标记的字符 例如 这个想法是作为区分产品的一种方式而提出的 但我想确定这不是一个坏主意 如果有什么关于它的事情 稍后会回来咬我 我在搜索中没有看到使用特殊字符的名称空间的其他示例 也没有看到有关
  • C++ 声明中的显式限定

    当第一个声明被注释掉时 以下命名空间定义无法编译 如果第一个声明foo未注释 那么它编译得很好 namespace Y void foo void Y foo 标准中的相关部分 8 3 1 说 当 declarator id 合格时 声明应
  • 来自不同框架的扩展方法的名称冲突

    作为测试 我创建了两个框架 两个框架都包含此扩展 public extension UIDevice var extraInfo UIDeviceExtraInfo return UIDeviceExtraInfo public class
  • R:使用 devtools 自动将 import(data.table) 添加到 NAMESPACE

    如何正确添加import data table to the NAMESPACE自动使用文件devtools 一般来说 如果我的包使用data table我只是手动写入 但是无法使用 export and devtools document
  • C++ 令人头疼的命名空间

    好吧 这个问题已经发生了一些变化 我想尝试从我正在追求的基本目标开始 重新 创建在 C 资源获取和初始化中包装遗留 C 语言实体的库代码 并提供基本或更好的异常保证 使此代码的客户端能够以非常自然的 C 方式使用它 而不会为现有代码创建大量
  • Rails 命名空间与嵌套资源

    假设我的应用程序有两个模型 Foo 和 Bar Foo 可选地属于 Bar 现在我可以查看单个 Foo 或者搜索特定的 Foo FoosController 会处理所有这些 我的网址是这样的 foos 1 and foos new 有时我想
  • CLSCompliant(true) 拖入未使用的引用

    任何人都可以explain以下行为 总之 如果您创建多个符合 CLS 标准Visual Studio 2008 中的库并让它们共享公共命名空间根 引用另一个库的库将require对该库的引用的引用 即使它不消耗它们 用一句话来解释是相当困难
  • 您可以将 Docker 映像直接拉入 IBM Cloud Kubernetes 集群吗?

    TL DR 抱歉 如果这是基础知识 我正在学习 Kubernetes 我尝试在 IBM Cloud 中创建 Kubernetes 部署 但失败了 该部署在我的本地 minikube 上运行良好 但在 IBM Cloud 中失败 我是否需要使
  • 您可以使用未命名的命名空间来隐藏标头中的常量吗?

    我在头文件的命名空间中包含一些内联函数 目前无法将它们移动到 cpp 文件中 其中一些内联函数使用魔术常量 例如 Foo h namespace Foo const int BAR 1234 inline void someFunc Do
  • 2个对象,完全相同(除了命名空间)c#

    我正在使用第三方的一组网络服务 但遇到了一个小障碍 在我手动创建将每个属性从源复制到目标的方法之前 我想我应该在这里寻求更好的解决方案 我有 2 个对象 一个是 Customer CustomerParty 类型 另一个是 Appointm
  • Kubernetes Pod 中的容器之间共享哪些命名空间?

    Linux中有6种命名空间 Network UTS Users Mount IPC Pid 我知道所有容器与 Kubernetes Pod 中的暂停容器共享相同的网络命名空间 默认情况下 不同的容器有不同的 PID 命名空间 因为它们有不同
  • 你如何组织你的命名空间?

    所以我有逻辑实体 人 国家等 GUI 元素 控件 数据和导航控制器 管理器 然后是四叉树和计时器之类的东西 我总是努力将这些东西干净地分离到逻辑名称空间中 我通常有这样的事情 利维坦 GUI 控件 Leviathan GUI 视图 利维坦实
  • 什么时候适合在 C++ 中使用 static(在未命名的命名空间上)?

    我一整天都在阅读有关未命名命名空间的文章 大多数文章都解释了何时应该在 static 关键字上使用未命名命名空间 但我仍然有一个大问题什么时候适合使用静态 毕竟它还没有完全弃用 那么带有静态函数的头文件我现在应该将它们放入未命名的命名空间中
  • 命名空间、类和自由函数 - 什么时候需要完全限定名称

    在下面的示例中 为什么我必须完全限定 cpp 中自由函数的名称以避免链接器错误 以及为什么它适用于没有链接器错误的类函数 你能解释一下其中的区别吗 ctest h int FreeFunction void 只是一个声明 而下面是一个定义
  • 使用限定类型实例化的模板内函数的名称解析

    考虑以下 C 代码示例 namespace n struct A struct B void foo int template
  • 为什么Python在函数中重用类实例

    我在一个函数内运行一个 for 循环 该函数创建一个类的实例来测试它们 它似乎没有创建新的类 而是一遍又一遍地重复使用相同的两个类 关于 python 方法中如何处理类和变量 我是否缺少一些东西 如何为循环的每次迭代生成一个新对象 clas
  • TypeScript 中类和命名空间的区别

    到底有什么区别classes and namespaces在打字稿中 我知道 如果您创建一个带有静态方法的类 您可以在不实例化该类的情况下访问它们 这正是我猜想的命名空间的要点之一 我还知道你可以创建多个同名的命名空间 并且它们的方法在编译
  • 运算符<<(流)转到哪个命名空间?

    如果我有一些为库本地对象定义的重载 ostream 运算符 它们可以转到 std 命名空间吗 如果我不在 std 命名空间中声明它们 那么我必须使用using ns operator lt lt 作为一个可能的后续问题 是否有任何运算符应该
  • php 脚本无法使用冒号 (:) 读取 xml 数据

    我尝试读取 youtube xml 数据宽度 php 但卡住了 因为 youtube 在他的 API 中使用冒号 准确地说 这是我使用的脚本 video array some arrays here separated width comm
  • JAXB:如何注释类以使它们属于不同的命名空间?

    我希望有JAXB 注释的类将是 编组 解组到不同的 XML 命名空间 我需要的是这样的

随机推荐

  • 基于ListView创建XML文件

    我想创建一个基于 ListView 的 XML 文件 现在 我正在创建 ListView 的位图 使其成为可绘制对象 然后将其设置为相对布局的背景 像这样 public Bitmap getWholeListViewItemsToBitma
  • java.sql.SQLException:用户“root”@“localhost”的访问被拒绝(使用密码:YES)Spring boot

    我针对这个问题进行了很多搜索 但没有找到适合我的好的解决方案 我的数据库名称 employee management system 我的应用程序属性 spring datasource url jdbc mysql localhost 33
  • 如何在 ruby​​ 中进行命名捕获

    我想命名从扫描中捕获的字符串 怎么做 555 333 7777 scan d 3 d 3 d 4 flatten gt 555 333 7777 可以改成这样吗 area gt 555 city gt 333 local gt 7777 o
  • SSRS 2008 日期格式化和导出到 Excel 混乱

    假设我在 Reporting Services 模板中有一个带有日期值的字段 例如 CDate 2010 12 03 我将 d 格式应用于此单元格 根据描述 该格式 将反映报告的区域设置 我使用英语生成报告 日期显示为12 03 2010
  • Python 计划未按计划运行

    我使用下面的代码每 5 分钟执行一次 python 脚本 但是当它下次执行时 它不会像以前那样在精确的时间执行 例如 如果我在上午 9 00 00 准确执行它 则下次它在上午 9 05 25 执行 下次在上午 9 10 45 执行 由于我每
  • React Router 中的 match.url 到底是什么?

    我在 React Router 文档中看到您传递到组件中match道具 你可以打电话match url 但您似乎从未真正将任何内容传递给组件 那么 match 到底是什么 你从哪里得到它 希望这可以帮助 https reacttrainin
  • 如何在 vaadin 中设置网格单元格样式

    我创建了一个带有一列的简单网格 public MyGrid addComponentColumn this getIcon setClassNameGenerator i gt icon img setItems some items se
  • Python文件IO“w”与“wb”[重复]

    这个问题在这里已经有答案了 想知道从 Python 编写文件时真正的区别是什么 从我可以看到如果我使用w or wb我用文本得到了相同的结果 我认为保存为二进制文件只会在十六进制编辑器中显示二进制值 但它也会显示文本 然后显示该文本的 AS
  • python:为什么替换不起作用?

    我编写了一个快速脚本 从保存在 Excel 列中的网站地址列表中删除 http 子字符串 但替换功能不起作用 我不明白为什么 from openpyxl import load workbook def rem string print s
  • JavaScript EventListener“pointerMove”:每秒点数

    我有一个添加了 pointerMove EventListener 的元素 现在 当移动鼠标时 我可以通过计算自 pointerDown 以来绘制的点总数并将其除以自 pointerDown 以来经过的时间来测量 pointerMove 每
  • 与 Jest 的全局 TypeORM 连接

    我在使用 PostgreSQL 与 TypeORM 和 Jest 时遇到一些问题 基本上 在每个测试文件中 我在测试运行之前打开数据库连接 并在所有测试运行后关闭它 但即使我关闭连接我收到sorry too many clients alr
  • Nginx proxy_pass 所有url参数

    我想代理这样的请求 http myproxy com api folder1 result1 test 1 http myproxy com api folder3447 something var one 前往同等目的地 http des
  • 从扩展获取登录 Visual Studio 用户的身份

    我正在开发一个 Visual Studio 2015 扩展 我希望获取登录 IDE 的用户的身份 与登录 Windows 或运行 devenv 的用户不同 我不知道从哪里 或是否 可以获得该信息 它似乎不在DTE https msdn mi
  • Javascript 数组是原始数组吗?字符串?物体?

    数组只是伪装的对象吗 为什么 为什么不呢 它们以什么方式 这样 不是 我一直认为 JS 中的数组和对象本质上是相同的 主要是因为访问它们是相同的 var obj I me var arr new Array arr you them con
  • 不确定为什么变量未定义。可能的范围问题?

    如果你看一下下面的函数 在第 11 行 它alert template 它打印undefined If I alert template 在ajax成功回调中 它打印没有问题 由于模板是在函数顶部定义的 因此这不应该在整个函数中是全局的吗
  • Windows 应用商店应用程序的日志记录框架

    我正在寻找将日志记录和检测构建到我的 Windows 应用商店应用程序中 对于 Windows 应用商店应用程序的良好日志记录框架有什么建议吗 我知道我可以通过写入文件或 Azure 存储来推出自己的产品 很好奇是否已经有任何东西 Go f
  • 从 Ruby 块中提取 AST

    是否有可能从 Ruby 本身获取一个块的 AST 我已经研究过 ParseTree 和 ruby parser 但它们似乎都对 Ruby 1 9 2 提供了粗略的支持 根据我读到的内容 我需要一些与 1 9 2 配合良好的东西 Ripper
  • 适用于 Windows 的 Zeromq PHP 扩展

    我正在使用配置了 IIS 7 5 的 Zend 服务器 我搜索了 edit Zeromq php 扩展 我找到了这些http valokuva org builds http valokuva org builds and http sna
  • 支持 Git 的开源 IDE [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我无法找到支持 Git 的开源 IDE 有什么可以给我指点或推荐的吗 有一个Eclipse 插件正在进行中 http www eclips
  • 什么是命名空间污染?

    命名空间污染 一词是什么意思 为什么将方法设为静态有助于防止它 这个问题 https stackoverflow com questions 8862665 what does it mean global namespace would