C++从入门到起飞之——inline/nullptr关键字全方位剖析!

2024-07-21 1161阅读

 C++从入门到起飞之——inline/nullptr关键字全方位剖析!

                                                                                个人主页:秋风起,再归来~

                                                                                           C++从入门到起飞                         

                                                                        个人格言:悟已往之不谏,知来者犹可追

                                                                                        克心守己,律己则安!

目录

1、inline

2、nullptr 

3.完结散花


1、inline

• ⽤inline修饰的函数叫做内联函数,编译时C++编译器会在调⽤的地⽅展开内联函数,这样调⽤内联 函数就不需要建⽴栈帧了,就可以提⾼效率。

inline int func(int x,int y)
{
	int ret = x + y;
	ret += 1;
	ret += 1;
	ret += 1;
	return ret;
}
int main()
{
	//可以通过反汇编观察程序是否展开
	// 有call func语句就是没有展开,没有就是展开了
	func(1,1);
	return 0;
}

C++从入门到起飞之——inline/nullptr关键字全方位剖析! 注意:为什么这里加了inline,函数还是没有展开,依然去调用了呢?

• 这是因为vs编译器debug版本下⾯默认是不展开inline的,这样⽅便调试,debug版本想展开需要设置⼀下 以下两个地⽅。

C++从入门到起飞之——inline/nullptr关键字全方位剖析!

C++从入门到起飞之——inline/nullptr关键字全方位剖析!

C++从入门到起飞之——inline/nullptr关键字全方位剖析! 好啦,设置好了我们直接来看一下func是否被展开了~

C++从入门到起飞之——inline/nullptr关键字全方位剖析!

• C语⾔实现宏函数也会在预处理时替换展开,但是宏函数实现很复杂很容易出错的,且不⽅便调 试,C++设计了inline⽬的就是替代C的宏函数。

• inline对于编译器⽽⾔只是⼀个建议,也就是说,你加了inline编译器也可以选择在调⽤的地⽅不展 开,不同编译器关于inline什么情况展开各不相同,因为C++标准没有规定这个。inline适⽤于频繁 调⽤的短⼩函数,对于递归函数,代码相对多⼀些的函数,加上inline也会被编译器忽略。

 好啦,如果我们在原来的函数上多加一些语句,看看编译器还会不会展开函数呢?C++从入门到起飞之——inline/nullptr关键字全方位剖析!

• inline不建议声明和定义分离到两个⽂件,分离会导致链接错误。因为inline被展开,就没有函数地 址,链接时会出现报错。

C++从入门到起飞之——inline/nullptr关键字全方位剖析!

2、nullptr 

NULL实际是⼀个宏,在传统的C头⽂件(stddef.h)中,可以看到如下代码:

#ifndef NULL
   #ifdef __cplusplus
        #define NULL    0
   #else5        
        #define NULL    ((void *)0)
   #endif
#endif

• C++中NULL可能被定义为字⾯常量0,或者C中被定义为⽆类型指针(void*)的常量。不论采取何种 定义,在使⽤空值的指针时,都不可避免的会遇到⼀些⿇烦,本想通过f(NULL)调⽤指针版本的 f(int*)函数,但是由于NULL被定义成0,调⽤了f(int x),因此与程序的初衷相悖。f((void*)NULL); 调⽤会报错。

void func(int x = 0)
{
	cout 
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]