广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++11内联命名空间举例分析
  • 591
分享到

C++11内联命名空间举例分析

2023-06-19 11:06:19 591人浏览 安东尼
摘要

本篇内容介绍了“c++11内联命名空间举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!命名空间简介随着软件开发规模的扩大,类名,函数名

本篇内容介绍了“c++11内联命名空间举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

命名空间简介

随着软件开发规模的扩大,类名,函数名重复的可能性也越来越大。最朴素的解决办法就是改名,这种方法在向已经存在的类库中添加代码时问题不大,但是如果是将两个从未谋面的代码库结合在一起时就不再适用了。

C++解决这个问题的办法就是引入命名空间。假设有下面两个命名空间:

C++11内联命名空间举例分析

代码中分别定义了std_namespace1和lstd_namespace2两个命名空间。在两个命名空间内分别定义了相同名称的NORMal类。这两个类的成员函数是否一样其实不重要,这里姑且使用了相同的名称。

有了命名空间以后,使用【命名空间名称::类名】的方式,就可以对这两个同名的Normal类加以区分了。

C++11内联命名空间举例分析

如果使用using语句,可以让某个命名空间的内容释放出来,就好像它们都存在与外层命名空间一样。

C++11内联命名空间举例分析

这种方法的一个弊端就是有可能发生类名重复的情况,这时就需要程序员来小心控制了。

内联命名空间

C++11中引入了内联命名空间(inline namespace),它的特点就是不需要使用using语句就可以直接在外层命名空间使用该命名空间内部的内容,而且无需使用命名空间前缀。先看代码:

C++11内联命名空间举例分析

内联命名空间的声明方法就是在原来的声明语法前面增加inline关键字。除此之外上面代码还有以下特点:

  1. 两处声明的命名空间同名,它们同属一个命名空间。这是C++命名空间从来就有的特性。

  2. 第一次声明命名空间时使用了inline关键字,这叫显式内联;第二次没有使用inline关键字,但是由于第一次已经声明了inline,这里声明的还是内联命名空间。这种情况成为隐式内联。

内联命名空间声明之后,就可以在外层命名空间不适用前缀而直接使用它们了。

C++11内联命名空间举例分析

上述代码中test_inline_namespace处在linline_namespace1的外层,所以可以直接使用Inline1和Inline2。test_inline_namespace2处在更外层,这时也只是需要使用外层命名空间inline_test前缀即可。

看起来inline_namespace就像不存在一样。

严肃的问题

前面提到内联命名空间就像不存在一样,那么就产生了一个严肃的问题:它有什么用?为了回答这个问题,我们举一个更加接近实际开发的例子。假设有如下类库代码:

C++11内联命名空间举例分析

很简单的类,当然使用这些类的代码也同样简单:

C++11内联命名空间举例分析

到这里为止算是铺垫,接下来才是重点:假设我们队类库进行了升级,同时又希望:

  1. 使用者代码不受影响,除非使用者自己想改。

  2. 可以自由使用新类库的功能

  3. 如果有需要仍然可以使用原来的类库

解决方法当然是使用内联命名空间。首先是对类库进行处理:

C++11内联命名空间举例分析

代码中为每个版本的类库定义了命名空间,同时将最新版本定义为内联命名空间。有了这样的准备之后,使用者代码可以是下面这样:

C++11内联命名空间举例分析

使用最新类库的时候,就好像没有定义过命名空间一样;如果实在是需要原来的类库,可以通用版本前缀加类名的方式。

还有一点很重要:由于隐式内联语法的存在,将来出现ver3的时候,只要将唯一的一个inline关键字移动到第一次出现的ver3定义之前就可以了!

“C++11内联命名空间举例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: C++11内联命名空间举例分析

本文链接: https://www.lsjlt.com/news/295652.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++11内联命名空间举例分析
    本篇内容介绍了“C++11内联命名空间举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!命名空间简介随着软件开发规模的扩大,类名,函数名...
    99+
    2023-06-19
  • C++中的命名空间实例分析
    这篇“C++中的命名空间实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++中的命名空间实例分析”文章吧。命名空间的...
    99+
    2023-06-29
  • namesapce命名空间的示例分析
    这篇文章主要介绍了namesapce命名空间的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.命名空间的使用目的   在PHP中函数、类、常量是不允许同名...
    99+
    2023-06-06
  • Flex命名空间的示例分析
    这篇文章主要介绍了Flex命名空间的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Flex命名空间详解通过命名空间可以控制所创建的属性和方法的可见性。请将public...
    99+
    2023-06-17
  • 【C++】命名空间 namespace 与 标准流 iostream ( 命名空间概念简介 | 命名空间定义 | 命名空间使用 | iostream 中的命名空间分析 )
    文章目录 一、命名空间 namespace1、命名空间基本概念2、名称概念4、C 语言的命名空间3、命名空间避免标识符冲突 二、命名空间定义1、命名空间基本概念2、命名空间定义语法3、代码示例 - 命名空间定义使用 三、命名...
    99+
    2023-08-20
    c++ namespace iostream 命名空间 标准流 原力计划
  • C++中名称空间的示例分析
    小编给大家分享一下C++中名称空间的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1.名称空间在C++当中,名称可以是变量、函数、结构体、枚举、类以及结构体和类的成员。这本身并没有问题,但随着项目的增大,名称之间相...
    99+
    2023-06-22
  • JavaScript命名空间模式的示例分析
    这篇文章将为大家详细讲解有关JavaScript命名空间模式的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:前言命名空间可以被认为是唯一标识符下代码的逻...
    99+
    2022-10-19
  • PHP核心特性命名空间的示例分析
    小编给大家分享一下PHP核心特性命名空间的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!提出PHP 在 5.3 后提出了命名空间用来解决组件之间的命名冲突问题,主要参考了文件系统的设计:同一个目录下不允许有相同的文...
    99+
    2023-06-15
  • PHP关键特性之命名空间的示例分析
    这篇文章主要介绍PHP关键特性之命名空间的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!你知道命名空间主要是为了解决代码中类和函数可能存在冲突的问题的吗?而这个特性其他语言一早就有,PHP则是姗姗来迟,它的出...
    99+
    2023-06-15
  • C++入门(命名空间,缺省参数,函数重载,引用,内联函数,auto,范围for)
    目录一.C++关键字二.命名空间三.缺省参数四.函数重载五.extern"C"六.引用七.内联函数八.auto关键字(C++11)九.范围for一.C++关键字 C++总共有63个关...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作