赞
踩
目录
2021-07-30 14:23:12
C++11中引入了内联命名空间(inline namespace),它的特点就是不需要使用using语句就可以直接在外层命名空间使用该命名空间内部的内容,而且无需使用命名空间前缀。
用途:默认放出新版接口,保留旧版的接口。
先看代码:
all::fun(1); #V2017版的inline了,所以外层不加空间前缀调用的就是V2017的 all::V2018::fun(1); #调用其他版本的就在函数名前指定加空间前缀
- #include <iostream>
- using namespace std;
-
- namespace all
- {
- //inline作用为默认调用
- inline namespace V2017
- {
- void fun(int num)
- {
- cout << "int" << "V2017" << endl;
- }
- }
- namespace V2018
- {
- void fun(int num)
- {
- cout << "int" << "V2018" << endl;
- }
-
- void fun(double num)
- {
- cout << "double" << "V2018" << endl;
- }
- }
- }
-
- void main()
- {
- all::fun(1);
- all::V2018::fun(1);
- cin.get();
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
14.inline与namespace使用 - 喵小喵~ - 博客园
默认放出新版接口,保留旧版的接口。
为了回答这个问题,我们举一个更加接近实际开发的例子。假设有如下类库代码:
使用时:
假设我们队类库进行了升级,同时又希望
解决方法当然是使用内联命名空间。首先是对类库进行处理:
代码中为每个版本的类库定义了命名空间,同时将最新版本定义为内联命名空间。有了这样的准备之后,使用者代码可以是下面这样:
使用最新类库的时候,就好像没有定义过命名空间一样;如果实在是需要原来的类库,可以通用版本前缀加类名的方式。
还有一点很重要:由于隐式内联语法的存在,将来出现ver3的时候,只要将唯一的一个inline关键字移动到第一次出现的ver3定义之前就可以了!
作者一句话
内联命名空间的应用场景相当有限,但是一旦用上了,还是比较神奇的。
示例代码下载地址
https://github.com/xueweiguo/OOThinking/blob/master/20180524%20InlineNamespace.cpp
原文链接:https://blog.csdn.net/craftsman1970/article/details/82872497
两处声明的命名空间同名,它们同属一个命名空间。这是C++命名空间从来就有的特性。
第一次声明命名空间时使用了inline关键字,这叫显式内联;第二次没有使用inline关键字,但是由于第一次已经声明了inline,这里声明的还是内联命名空间。这种情况成为隐式内联。
内联命名空间声明之后,就可以在外层命名空间不适用前缀而直接使用它们了。
上述代码中test_inline_namespace处在linline_namespace1的外层,所以可以直接使用Inline1和Inline2。test_inline_namespace2处在更外层,这时也只是需要使用外层命名空间inline_test前缀即可。
看起来inline_namespace就像不存在一样。
原文链接:https://blog.csdn.net/craftsman1970/article/details/82872497
@UESTC
参考:C++11新特性(79)-内联命名空间(inline namespace)_面向对象思考的博客-CSDN博客_内联命名空间
14.inline与namespace使用 - 喵小喵~ - 博客园
2012-10-08 23:03:12
编译器完成的,在调用处将函数展开,减少了调用函数时进栈和出栈,坏处是会增加代码段的大小(缺点:增加了编译后的二进制文件的大小),为了提高运行的速度,对于一些程序代码小,运行时间短但利用次数比较多的函数我们就定义为inline,对于短小的函数,可以省去CALL保存现场等操作,提高程序运行速度。
原文:C语言中内联函数的作用-hfm_honey-ChinaUnix博客
分类: C基础2011-08-27 03:19 1159人阅读 评论(3) 收藏 举报
[cpp] view plaincopy
[cpp] view plaincopy
对于这个函数,在进行反复的打印3的过程中我们是不是要反复的调用myprintf(int a)这个函数,进函数和出函数是需要时间的,假设这个过程用时为4ms,而执行printf这个操作只需要2ms,那么在100次循环的过程中进出函数的时间比函数功能printf需要的时间还要长,这样很影响工作效率。于是,我们就想要如何去免去进出函数的过程呢?那么就可以声明inline这个关键字,有何用途?当我们声明了一个inline的函数时候,函数被调用的语句就被替换成了函数本身,进行了一个预处理
[cpp] view plaincopy
这样一来我就非常明显的知道这个函数是干什么的了,就不需要去调用函数的定义部分,再通俗点讲,原来我要从家里去外面的商店去买冰淇淋(来回需要时间),现在商店就在我家里面了,那么我是不是省去了去商店的时间呢?但是相应的我这个家要很大(也就是所谓的空间要很大才能包含这个商店对吧?)这样就是用空间去换取了时间了。
内联函数在编译层面类似于宏替换。也就是说,程序执行过程中调用内联函数不需要入栈出栈,所以效率会提高。
[cpp] view plaincopy
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。