当前位置: 首页 > news >正文

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

文章目录

  • 前言
  • 简介
  • 定义命名空间
  • 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.lryc.cn/news/223684.html

相关文章:

  • 缓存-Spring Cache 缓存抽象
  • Java修仙传之神奇的ES2(巧妙的查询及结果处理篇)
  • 架构设计的课程资料
  • 数据结构与算法C语言版学习笔记(5)-串,匹配算法、KMP算法
  • 新版HI3559AV100开发注意事项
  • Django(一、简介,安装与使用)
  • 【Linux C IO多路复用】多用户聊天系统
  • JSON——数组语法
  • 运营商大数据精准获客:我们提供精准客源渠道的最大资源体?
  • 表象变换与矩阵元
  • vue乾坤微前端项目
  • 大语言模型比武
  • 王道数据结构第五章二叉树的遍历第13题
  • 微服务的发展历程的详细说明及每个阶段主流的架构和组件
  • 2023年眼镜行业分析(京东眼镜销量数据分析):市场规模同比增长26%,消费需求持续释放
  • 基础课26——业务流程分析方法论
  • 【数字图像处理-TUST】实验二-图像噪声生成与滤波降噪
  • bilibili快速升满级(使用Docker 容器脚本)
  • Android 13.0 Settings主页面去掉FocusRecyclerView相关功能
  • Python(四)字符串
  • WPF中ElementName与RelativeSource绑定的局限性以及对策
  • 基于PHP语言的会员系统搭建(Docker版)
  • 文件改名:一次性解决文件名混乱,批量重命名技巧
  • app自动化测试——capability 配置参数解析
  • 数仓面经大框架
  • C++ explicit关键字的作用
  • 排序算法之-冒泡
  • 【微服务】API治理发展历史与未来趋势
  • TikTok shop美国小店适合哪些人做?附常见运营问题解答
  • [OS]11.9.2023 中断