栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++入门篇-----inline,auto,nullptr

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++入门篇-----inline,auto,nullptr

文章目录
    • 内联函数
    • auto
    • 空指针,以后使用nullptr就行

内联函数

内联函数的概念:以关键字inline修饰的函数称为内联函数。C++编译器会在函数调用的地方直接展开,而不是去调用
函数,这样避免了函数栈帧的创建,可以提高效率

看看没有inline修饰的函数,他是去调用函数(call是调用的意思),建立函数栈帧

int Count()
{
	int a = 10;
	return a;
}

int main()
{
    Count();
	return 0;
}


加上inline修饰的函数还会去调用吗? 下面两种方法都不会去调用
1,加上inline,改为release版本下运行,打完断点,转到反汇编,你会发现函数都点进不去(这路就不试了)
2,加上inline,在Debug版本下设置一下,因为编译器的Debug版本下,默认是不会优化的,设置方式如图
点开该项目的属性

inline int Count()
{
	int a = 10;
	return a;
}

int main()
{
    Count();
	return 0;
}

inline函数的特性
1,以空间换时间,避免函数栈帧的创建,但是函数中有循环或者递归就不适合用内联,因为展开的话会超级长
2,对编译器仅仅是个建议,听不听还要编译器的心情 ,哈哈
3,inline修饰函数在多文件中,声明和定义是一定不能分开的,因为inline函数会被展开,从而找不到函数的地址

提一下宏的优点和缺点
1,增强代码的复用性
2,提高性能

缺点:
1,不方便调试
2,没有类型检查
3,代码可读性差,可维护性差,易出错

C++有什么可以替代宏的吗?
1,const 修饰的常量
2,inline修饰的函数

auto

C++中的auto不是用来定义局部变量,而是来进行推导变量的类型的

1,auto定义的变量必须初始化
2,auto可以一行定义多个变量,但是每个常量必须相同

int main()
{
	int a = 10;
	auto b = a;   //这里推导的b是int  
	auto c = "a"; //c是char
	
	auto d = &a;   //者两个用法是完全一样的,都是定义了指针
	auto* e = &a; 
	
	auto& f = a;   //定义引用必须加上&

    auto x = 10, y =20;
    auto x = 2.2, y = 10;  //报错

	return 0;
}


auto不适合的场景是
1,不适合做函数的参数,(可以作为返回类型,VS2019不报错)
2,不适合用来定义数组

范围for的用法

int main()
{
	int a[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 };

	//分号分割,左边是把数组中的元素赋值给e,右边是数组名
	//这里的e的类型也可以写出int,但是我们习惯用auto
	for (auto e : a)
	{
		cout << e << " ";
	}
	return 0;
}

如果要改变数组中的元素要怎么办? 分号左边改为引用即可 auto&

但是这里有个问题,万一是数组参数中的数组名会怎么样(这里就是指针了,无法确定数组的范围,就会报错)

//这里就不适合for范围的使用了,
void test2(int  a[])
{
	for (auto e : a)
	{
		cout << e << endl;
	}
}
空指针,以后使用nullptr就行

C++中的NULL解释为了 0,虽然不会出现什么错误,但是还是存在一点小问题

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

例如:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/878825.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号