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

C++ 语言特性02 - 命名空间

一:概述

        现代C++中的命名空间是什么?

        C++中的命名空间允许用户在命名空间范围内对类、方法、变量和函数等实体进行分组,而不是在全局范围内使用。这可以防止大型项目中的类、方法、函数和变量之间发生命名冲突。命名空间将开发人员编写的代码组织到不同逻辑范围中。因此,不同的用户可以在不同的进程中使用相同的方法和变量。 

#include <iostream>namespace nsA
{void myf(){std::cout << "this is myf() function in nsA namespace\n";}
}int main()
{ nsA::myf(); // Let's use a method or function from nsA namespacesystem("pause");return 0;
}

        在现代C++中,命名空间是一种库或框架。它们对于在不同的命名空间中保存相同命名的类、方法和其他实体非常有用。C++11标准和上面的其他标准,允许在命名空间定义中使用内联关键字,在这篇文章中,我们解释了如何在现代C++中使用内联命名空间。

        C++11标准和上面的其他标准允许在命名空间定义中使用inline关键字。这样做是为了指定命名空间的成员可以被定义和专门化,就好像它们实际上属于封闭的命名空间一样。

        在C++11和上述标准中,这种新构造称为内联命名空间,它解决了模板只能在其实际命名空间中进行专门化,而不能在其导入的命名空间中进行专门化的问题。

        下面是内联命名空间的语法(从C++11开始)

inline namespace name_of_ns
{ // definition and declarations 
}

        从C++17开始,你可以使用任意数量的属性的可选序列,如下所示。

inline namespace <seq_attr> name_of_ns
{ // definition and declarations 
} 

二:例子1

namespace Lib
{inline namespace Lib_1{template <typename T> class A; }template <typename T> void g(T);
}struct MyClass {  };
namespace Lib
{template<> class A<MyClass> {  };
}int main()
{Lib::A<MyClass> a;g(a);  // ok, Lib is an associated namespace of A
}
namespace Parent {namespace V1 {void foo() { std::cout << "foo v1.0" << std::endl; }}inline namespace V2 {void foo() { std::cout << "foo v2.0" << std::endl; }}
}int main()
{Parent::foo(); //V2::fooParent::V1::foo(); //V1:foo
}

        

        

http://www.lryc.cn/news/425103.html

相关文章:

  • drools规则引擎 规则配置文件drl语法使用案例
  • C++编程:高性能通信组件Capnproto与Protobuf的对比分析
  • 【Python读书数据,并计算数据的相关系数、方差,均方根误差】
  • 垃圾收集器G1ZGC详解
  • AI芯片:高性能卷积计算中的数据复用
  • gitlab修改默认访问端口
  • python——异常
  • 【人工智能】利用TensorFlow.js在浏览器中实现一个基本的情感分析系统
  • Python——扩展数据类型
  • JavaScript 详解——Vue基础
  • 机械行业数字化生产供应链产品解决方案(十二)
  • Git——命令集合
  • python 数据可视化折线图练习(下:代码演示)
  • 深入探索 Go 1.18 的 debug/buildinfo:构建信息的获取与应用
  • Nios II的BSP Editor
  • Android-自适用高度的ViewPager
  • 代码随想录day38|| 322零钱兑换 279完全平方数 139单词拆分
  • Cesium天空盒子(Skybox)制作(js代码)和显示
  • JAVA中的缓冲流BufferedInputStream
  • WindowContainerTransaction类详解(一)
  • 安装NFS扩展
  • 计算机网络——运输层(进程之间的通信、运输层端口,UDP与TCP、TCP详解)
  • 代码随想录算法训练营第一天 | 二分查找
  • python相关知识
  • Visual Studio 2022 LNK2001无法解析的外部符号 _wcscat_s 问题记录
  • Java高并发处理机制
  • 7 数据存储单位,整型、浮点型、字符型、布尔型数据类型,sizeof 运算符
  • 导游职业资格考试真题题库
  • 【Rust】使用开源项目搭建瓦片地图服务
  • 【面试宝典】mysql常见面试题总结(上)