C++学习笔记---命名空间namespace

news/2024/10/25 9:30:41/

文章目录

  • 前言
  • 简介
  • 定义命名空间
  • using指令
  • 不连续&嵌套的命名空间

前言

wu


简介

C++中的命名空间(Namespace)是一种用于组织和封装代码的机制,它允许你将一组相关的函数、类、变量和其他标识符放置在一个逻辑分组内,以便在不同的地方使用相同的名称而不会发生冲突。

在 C++ 应用程序中。例如,你可能会写一个名为 xyz() 的函数,在另一个可用的库中也存在一个相同的函数 xyz()。这样,编译器就无法判断你所使用的是哪一个 xyz() 函数。

因此,引入了命名空间这个概念,专门用于解决上面的问题,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围。

举一个计算机中的例子,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。


定义命名空间

命名空间的定义使用关键字 namespace,后跟命名空间的名称,如下所示:

namespace namespace_name {// 代码声明
}

为了调用带有命名空间的函数或变量,需要在前面加上命名空间的名称,如下所示:

namespace_name::code;  // code 可以是变量或函数

命名空间如何为变量或函数实体定义范围:

#include <iostream>
using namespace std;// 第一个命名空间
namespace first_space{void func(){cout << "Inside first_space" << endl;}
}
// 第二个命名空间
namespace second_space{void func(){cout << "Inside second_space" << endl;}
}
int main ()
{// 调用第一个命名空间中的函数first_space::func();// 调用第二个命名空间中的函数second_space::func(); return 0;
}

执行结果:

Inside first_space
Inside second_space

using指令

可以使用 using namespace 指令引入整个命名空间,使该命名空间中的所有标识符都在当前作用域内可用,这样在使用命名空间时就可以不用在前面加上命名空间的名称。这个指令会告诉编译器,后续的代码将使用指定的命名空间中的名称。

如:

using namespace std; // 引入 std 命名空间,使 std 中的标识符可直接访问

实例:

#include <iostream>
using namespace std;// 第一个命名空间
namespace first_space{void func(){cout << "Inside first_space" << endl;}
}
// 第二个命名空间
namespace second_space{void func(){cout << "Inside second_space" << endl;}
}
using namespace first_space;
int main ()
{// 调用第一个命名空间中的函数func();return 0;
}

执行结果:

Inside first_space

using指令也可以用来指定命名空间中的特定项目。例如,如果您只打算使用 std 命名空间中的 cout 部分,可以使用如下的语句:

using std::cout;

随后的代码中,在使用 cout 时就可以不用加上命名空间名称作为前缀,但是 std 命名空间中的其他项目仍然需要加上命名空间名称作为前缀,如下所示:

#include <iostream>
using std::cout;int main ()
{cout << "std::endl is used with std!" << std::endl;return 0;
}

执行结果:

std::endl is used with std!

不连续&嵌套的命名空间

在C++中,可以创建不连续、嵌套的命名空间。

如下:

#include <iostream>namespace OuterNamespace {int outerVar = 10;namespace InnerNamespace {int innerVar = 5;}
}namespace Department {int employeeCount = 50;
}int main() {// 访问嵌套的命名空间中的变量std::cout << "OuterNamespace::outerVar: " << OuterNamespace::outerVar << std::endl;std::cout << "OuterNamespace::InnerNamespace::innerVar: " << OuterNamespace::InnerNamespace::innerVar << std::endl;// 访问不连续的命名空间std::cout << "Department::employeeCount: " << Department::employeeCount << std::endl;return 0;
}

.


http://www.ppmy.cn/news/1207817.html

相关文章

Centos 64位环境下编译32位C程序

在64位平台下&#xff0c;默认编译的是64位程序。如果需要编译32位程序&#xff0c;需要指定gcc 编译选项“-m32”。 但是&#xff0c;在编译过程中&#xff0c;往往会碰到这样的错误&#xff1a;atal error: gnu/stubs-32.h: No such file or directory。 在链接过程中&#x…

java正则表达式(Pattern类和Matcher类)

文章目录 前言一、Java中使用正则表达式①捕获组②Pattern类与Matcher类Pattern类&#xff1a;Matcher类&#xff1a;Pattern类&Matcher类方法:Pattern类调用方法&#xff08;静态方法&#xff09;&#xff1a;1、public static Pattern compile(String regex)2、public st…

css呼吸效果实现

实现一个图片有规律的大小变化&#xff0c;呈现呼吸效果&#xff0c;怎么用CSS实现这个呼吸效果呢 一.实现 CSS实现动态效果可以使用动画( animation)来属性实现&#xff0c;放大缩小效果可以用transform: scale来实现&#xff0c;在这基础上有了动画&#xff0c;就可以设置一个…

Microsoft SDKs 有文件重定义导致编译失败的处理

一个32位的mfc项目&#xff0c;之前采用vs2019编译&#xff0c;现在换了电脑(系统是win10)&#xff0c;采用vs2022编译时&#xff0c;提示如下错误&#xff1a; 1>------ 已启动生成: 项目: aAnsys, 配置: Debug Win32 ------ 1>cl : 命令行 warning D9035: “Gm”选项…

强化IP地址管理措施:确保网络安全与高效性

IP地址管理是网络安全和性能管理的关键组成部分。有效的IP地址管理可以帮助企业确保网络的可用性、安全性和高效性。本文将介绍一些强化IP地址管理的关键措施&#xff0c;以帮助企业提高其网络的安全性和效率。 1. IP地址规划 良好的IP地址规划是强化IP地址管理的基础。它涉及…

讲解机器学习中的 K-均值聚类算法及其优缺点。

K-均值聚类算法是一种无监督学习算法&#xff0c;常用于对数据进行聚类分析。其主要步骤如下&#xff1a; 首先随机选择K个中心点&#xff08;质心&#xff09;作为初始聚类中心。 对于每一个样本&#xff0c;计算其与每一个中心点的距离&#xff0c;将其归到距离最近的中心点…

scitb包1.5版本发布—增加了统计值的结果和自动判断数据是否正态分布的功能

目前&#xff0c;本人写的scitb包1.5版本已经正式在R语言官方CRAN上线&#xff0c;scitb包是一个为生成专业化统计表格而生的R包。目前只能绘制基线表一。 可以使用以下代码安装 install.packages("scitb")安装过旧版本的从新安装一次就可以升级了 scitb包1.5版本修…

Note1: 算法的时间复杂度和空间复杂度

目录 ---前言 1.算法效率 1.1 算法的复杂度 2.时间复杂度 2.1 时间复杂度的概念 2.2 大O的渐进表示法 2.3常见时间复杂度计算举例 2.3.1 示例1 2.3.2 示例2 2.3.3 示例3 2.3.4 示例4 2.3.5 示例5 2.3.6 示例6 2.3.7 示例7 2.3.8 示例8 3.空间复杂度 3.1 示例1 …