全局作用域与全局命名空间

2023-11-21

我看到了这两个短语的用法:全局范围和全局名称空间。它们之间有什么区别?


在 C++ 中,每个名称都有其作用域,超出该作用域就不存在。范围可以通过多种方式定义:它可以通过以下方式定义名称空间, 功能, classes并且只是{ }.

因此,全局或其他命名空间定义了一个范围。全局命名空间指的是使用::,并且在此命名空间中定义的符号被认为具有全局范围。默认情况下,符号存在于全局命名空间中,除非它是在以关键字开头的块内定义的namespace,或者它是类的成员,或者函数的局部变量:

int a; //this a is defined in global namespace
       //which means, its scope is global. It exists everywhere.

namespace N
{
     int a;  //it is defined in a non-global namespace called `N`
             //outside N it doesn't exist.
}
void f()
{
   int a;  //its scope is the function itself.
           //outside the function, a doesn't exist.
   {
        int a; //the curly braces defines this a's scope!
   }
}
class A
{
   int a;  //its scope is the class itself.
           //outside A, it doesn't exist.
};

另请注意,name可以被命名空间、函数或类定义的内部作用域隐藏。所以这个名字a命名空间内N隐藏名字a在全局命名空间中。同样,函数和类中的名称隐藏了全局命名空间中的名称。如果你遇到这样的情况,那么你可以使用::a引用全局命名空间中定义的名称:

int a = 10;

namespace N
{
    int a = 100;

    void f()
    {
         int a = 1000;
         std::cout << a << std::endl;      //prints 1000
         std::cout << N::a << std::endl;   //prints 100 
         std::cout << ::a << std::endl;    //prints 10
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

全局作用域与全局命名空间 的相关文章

随机推荐

  • 如何使用 google reader API 标记已读项目?

    我一直在为谷歌阅读器开发一个客户端 一切工作正常 除了我无法编辑条目以添加 加星标 和 已读 等标签 code google com p pyrfeed wiki GoogleReaderAPI 和 www niallkennedy com
  • 为什么在 django 设置中将 debug 设置为 false 会阻止 Heroku 应用程序在开发和生产中加载?

    在我的设置中我已经设置了DEBUG False但这反而在开发和生产中生成了 500 错误 所以我环顾四周 发现了这个 设置 DEBUG False 会导致 500 错误 并尝试了一下 ALLOWED HOSTS www heroku com
  • Python 类是否像其他语言一样支持事件?

    我正在开发我的第一个 Python 项目 并且我已经错过了课堂上的活动 也许它在Python中甚至不被称为事件 但我想在我的类中创建 组 可以向其中添加函数引用 在我的班级中的某个时刻 我的组中的所有函数引用都会执行 这是Python内置的
  • PHP JSON 大整数

    我正在使用 json encode 将我的 php 多维数组转换为输出 json 通常 此函数会将所有值转换为字符串 为了确保整数值作为整数值发送到 javascript 我使用数字检查 json json encode data JSON
  • UPDATE 查询后的 PDO rowCount() 可以显示“未进行更改”和“不存在的行”之间的区别吗?

    我正在使用 PDO 进行更新查询 我想知道我的更新查询是否没有更改数据库中的任何内容 因为 传递的值与数据库中已有的值相同 我知道rowCount 在这种情况下返回0 我尝试更新的行在数据库中不存在 据我所知 rowCount 在这种情况下
  • 如何知道窗口小部件在视口中是否可见?

    我有一个视图 其中包含Scaffold和一个单一的ListView在其主体中 列表的每个子项都是一个不同的小部件 代表视图的各个 部分 部分范围从简单的 TextView 到排列Columns and Rows 我想展示一个Floating
  • Sqlalchemy:从Scrapy项目动态创建表

    我正在使用 sqlalchemy 1 1 和 scrapy 我目前正在使用管道通过 sqlalchemy 将提取的数据存储在 sqllite 表中 我想动态创建一个表来容纳正在抓取的项目 我的静态管道元素如下所示 class SQLlite
  • NSXMLParserDelegate 编译问题 - iPhone SDK 30. vs 4.0

    我的头文件定义如下 import
  • 自动释放何时真正导致 Cocoa Touch 中的释放?

    我明白你需要小心autorelease在 iOS 上 我有一个返回对象的方法allocs 这是调用者需要的 所以在这种情况下 据我所知 我需要发送autorelease返回之前被调用者中的对象 这很好 但是一旦控制权返回到手机 即在处理了我
  • 如何使用 spring boot 和 Liquibase 变更集 yaml 文件访问系统属性

    使用 Liquibase 管理数据库架构更改的 Spring Boot Java 应用程序是通过指定其运行环境的参数 例如 dev int 启动的 有相应的属性文件 例如 dev properties int properties 它们定义
  • 签入时 Visual Studio 崩溃

    当我每次尝试签入挂起的更改时 我的 Visual Studio 2013 都会崩溃 我该如何解决 崩溃日志 System UnauthorizedAccessException Package SccProviderPackage fail
  • OpenCV 结构化边缘检测器的模型文件

    OpenCV实现结构化边缘检测基于基于随机森林的方法概述 用于快速边缘检测的结构化森林 2013 作者 P Doll r 和 C Zitnick 作者已发表Matlab 的实现还有一个用于Python 两者还包含基于 BSDS500 数据集
  • i18n 用于选择框

    我有一个名为 Role 的模型 我正在表单中使用下面的助手 有没有办法将 name 属性的值更改为另一种语言 语言环境 de yml de role admin something editor something something 在模
  • 请求的纹理大小 [0x0] 无效。当我在浏览器中加载图像时出错

    调用预测函数时浏览器中的 Tensorflow js 错误 我正在使用 Node js 来运行 web 应用程序 这是我包含的脚本 我正在 Chrome 中运行 Node js 但无法解决该错误 该项目有 7 个类作为输出 是形状为 1x7
  • 在 C# 中使用 REF 和 OUT 关键字进行按引用传递与按值传递

    到目前为止我的理解如下 价值传递 按值传递意味着传递参数的副本 对该副本的更改不会更改原始版本 通过参考 通过引用传递意味着传递对原始内容的引用 对引用的更改会影响原始引用 参考关键字 REF 告诉编译器该对象在进入函数之前已初始化 REF
  • 如何处理列表推导式中的异常?

    我在 Python 中有一些列表理解 其中每次迭代都可能抛出异常 例如 如果我有 eggs 1 3 0 3 2 1 egg for egg in eggs 我会得到一个ZeroDivisionError第三个元素例外 如何处理此异常并继续执
  • HTML5 Colspan - 替代方案[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我在 HTML 的 td 标签之一中使用 colspan 我不想在 HTML 中使用 c
  • 带有外部 .jar 的 Java 命令行

    我使用 jar 开发一个项目来重用代码 所以我有一个名为 TOOLS jar 的 jar 并且我在文件 HelloWorld java 中开发了一个简单的应用程序 该应用程序从 TOOLS jar 引用我的包 TOOLS 我用这个命令行编译
  • python 输入 UnicodeDecodeError:

    蟒蛇3 x gt gt gt a input hope gt gt gt a hope gt gt gt b input h pe gt gt gt b h pe gt gt gt c input start typing h delete
  • 全局作用域与全局命名空间

    我看到了这两个短语的用法 全局范围和全局名称空间 它们之间有什么区别 在 C 中 每个名称都有其作用域 超出该作用域就不存在 范围可以通过多种方式定义 它可以通过以下方式定义名称空间 功能 classes并且只是 因此 全局或其他命名空间定