【C++11】inline与namespace使用|C语言的inline内联函数的作用
目录
inline与namespace使用
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();
}
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使用 - 喵小喵~ - 博客园
C语言的inline内联函数的作用
2012-10-08 23:03:12
编译器完成的,在调用处将函数展开,减少了调用函数时进栈和出栈,坏处是会增加代码段的大小(缺点:增加了编译后的二进制文件的大小),为了提高运行的速度,对于一些程序代码小,运行时间短但利用次数比较多的函数我们就定义为inline,对于短小的函数,可以省去CALL保存现场等操作,提高程序运行速度。
原文:C语言中内联函数的作用-hfm_honey-ChinaUnix博客
分类: C基础2011-08-27 03:19 1159人阅读 评论(3) 收藏 举报
[cpp] view plaincopy
- 关内联函数键字inline
[cpp] view plaincopy
- void myprintf(int a)
- {
- priintf("%d",a);
- }
- int main()
- {
- for(i=0;i<100;i++)
- myprintf(3);
- }
对于这个函数,在进行反复的打印3的过程中我们是不是要反复的调用myprintf(int a)这个函数,进函数和出函数是需要时间的,假设这个过程用时为4ms,而执行printf这个操作只需要2ms,那么在100次循环的过程中进出函数的时间比函数功能printf需要的时间还要长,这样很影响工作效率。于是,我们就想要如何去免去进出函数的过程呢?那么就可以声明inline这个关键字,有何用途?当我们声明了一个inline的函数时候,函数被调用的语句就被替换成了函数本身,进行了一个预处理
[cpp] view plaincopy
- int main()
- {
- for(i=0;i<100;i++)
- void myprintf(3)
- {
- printf("%d",3);
- }
- return 0;
- }
这样一来我就非常明显的知道这个函数是干什么的了,就不需要去调用函数的定义部分,再通俗点讲,原来我要从家里去外面的商店去买冰淇淋(来回需要时间),现在商店就在我家里面了,那么我是不是省去了去商店的时间呢?但是相应的我这个家要很大(也就是所谓的空间要很大才能包含这个商店对吧?)这样就是用空间去换取了时间了。
内联函数在编译层面类似于宏替换。也就是说,程序执行过程中调用内联函数不需要入栈出栈,所以效率会提高。
[cpp] view plaincopy
- #include
- inline int add(int x, int y)
- {
- return x+y;
- }
- int main()
- {
- int i,j,k;
- printf("请输入两个整数的值:");
- scanf("%d%d",&i,&j);
- k=add(i,j);
- printf("k=%d\n",k);
- return 0;
- }