概要
这篇博客主要整理和总结了 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);
}
像这个无限递归的函数不可能当内联函数处理,不然代码段就会被撑爆了。
宏定义在 c++中怎么使用的? const 关键字
在c里有一个很好的能够定义全局变量的东西就是宏定义。但是这个宏定义也有着自己的缺陷。#define 它会检查后面参数的类型,直接往该替换的位置去替换。
c++中有一个非常好用的且安全的方法来使用常量的定义.
const

本文总结了C++中的inline内联函数、auto关键字和nullptr的使用。内联函数用于提高代码执行效率,但并非所有声明inline的函数都会被内联。auto简化了类型推断,但不能用于函数参数和未初始化变量。nullptr是C++中明确表示空指针的关键词,优于NULL。
最低0.47元/天 解锁文章
26万+

被折叠的 条评论
为什么被折叠?



