C++ :内联函数inline|nullptr
欢迎来到Harper·Lee的学习笔记!
博主主页传送门:Harper·Lee博客主页!
欢迎交流学习!
一、inline关键字
1.1 什么是内联函数?
内联函数:用** inline 修饰的函数叫做内联函数,编译时C++编译器会在调用的地方展开内联函数**,这样调用内联函数就需要创建栈桢,就提高效率了。
1.2 为什么会有内联函数?
1.2.1 回顾宏
主要目的就是为了替代C语言中的宏。先回顾一下什么是宏:
- 宏就是一种替换,右边的替换掉左边的;
#include using namespace std; //right #define ADD(x,y) ((x)+(y))//括起来 int main() { int ret = ADD(1,2);//替换后:int ret = ((1)+(2)); cout int ret = ADD(1,2);//替换后:int ret = ((1)+(2)); cout int ret = ADD(1,2);//替换后:int ret = ((1)+(2)); return 0; } //error #define ADD(x,y) (x+y) #define ADD(x,y) (x)+(y) #define ADD(x,y) (x+y) #define ADD(x,y) ((x)+(y));//不能加分号 #define ADD(int x,int y) return x+y;//不能加分号; int ret = a + b; return ret; } int main() { int ret = Add(1, 2); cout cout // 链接错误:⽆法解析的外部符号 f(10);//链接:但是.h文件中函数的声明被inline修饰了,就没有函数地址 return 0; } cout cout f(0); // 本想通过f(NULL)调⽤指针版本的f(int*)函数,但是由于NULL被定义成0,调⽤了f(intx),因此与程序的初衷相悖。 f(NULL); f((int*)NULL);//NULL写成0也可以 // f((void*)NULL);//强转成void*,编译报错:error C2665: “f”: 2 个重载中没有⼀个可以转换所有参数类型 f(nullptr); return 0; }
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。