C++中 inline、auto 、nullptr总结

概要

这篇博客主要整理和总结了 inline 、 auto 、nullptr 关键字的用法。

内联函数关键字 inline

首先我们知道在c环境下的程序编译要经过,预处理、编译、链接等等。
在预处理环节当中,c语言会展开头文件、将注释消除、替换define所定义的宏。

什么是宏?宏有什么优点?

宏相对于函数来说它将宏函数在预处理阶段进行展开,替换宏定义的变量。
对于一些短小的函数,在预处理阶段将其替换,会加快程序的执行效率。
但是相对的宏函数有自己的副作用。这些副作用来自于它不会对参数进行检验,并且一旦改变参数的输入格式可能会产生未知的后果

    #include<iostream>
    using namespace std;
    
    #define MAX(a,b) ((a)>(b)?(a):(b))
    //这是一个比大小的宏
    
    int main()
    {
   
    	int a = 10, b = 11;
    	cout << "a : " << a << endl;
    	cout << "b : " << b << endl;
    	cout<< MAX(++a, b) << endl;
    	cout << "a : " << a << endl;
    	cout << "b : " << b << endl;
    	return 0;
    }

以上代码可以看出虽然使用了宏函数比出大小,但是出现了不希望的结果。比较了一次永久的改变了a的值。

在c++中的内联函数 inline 关键字

内联函数是指在一个函数前加一个关键字inline,内联函数会将inline函数修饰的直接展开。与define定义的宏函数相似的是inline修饰的内联函数也是在编译的是偶进行替换。

    #include<iostream>
    using namespace std;
    
    inline int Add(int left, int right)
    {
   
    	return left + right;
    }
    
    int main()
    {
   
    	int a = 10, b = 11;
    	Add(a, b);
    	return 0;
    }

在vs2013的编译器下,我们可以看到好像这个内联函数并没有展开,而是使用了call指令进行调用。那么inline到底用了没有?

在这里插入图片描述

随后使用了 release 进行调试,这次好玩了连main()函数都没了。

在这里插入图片描述

最后经过查阅相关资料,要想看到inline的调用过程,

右击源文件–> 属性 --> c/c++常规 --> 信息调用模式 -->选择程序数据库

右击源文件–> 属性 --> 优化 --> 内联函数扩展 -->选择只适用于扩展inline

在这里插入图片描述

由此可以看到,没有使用call指令进行调用函数。而是使用了加法指令add。

如何判断了内联函数的使用?

inline只是一个建议性的关键字。所谓建议指的是编译器在进行编译的时候,对其是否使用inline的优化加以建议。编译器一般比较喜欢那些,函数体短的,没有循环的,没有递归的代码来当做inline处理。

例如,如果这个函数又臭又长,你还加入了inline关键字,编译器自然不愿意去把这份代码复制多份加入到main()里面。耗时耗力

	inline int Add( int a ,int b)
	{
   
		Add(a,b
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值