C++ :内联函数inline|nullptr

07-12 1141阅读

欢迎来到Harper·Lee的学习笔记!

博主主页传送门:Harper·Lee博客主页!

C++ :内联函数inline|nullptr

欢迎交流学习!

一、inline关键字

1.1 什么是内联函数?

内联函数:用** inline 修饰的函数叫做内联函数,编译时C++编译器会在调用的地方展开内联函数**,这样调用内联函数就需要创建栈桢,就提高效率了。

1.2 为什么会有内联函数?

1.2.1 回顾宏

主要目的就是为了替代C语言中的宏。先回顾一下什么是宏:

  1. 宏就是一种替换,右边的替换掉左边的;
#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;
}

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]