初识C++之内联函数 auto关键字

初识C++之内联函数 auto关键字

一、 内联函数

1.1 定义

inline修饰的函数叫做内联函数,在在编译时编译器会在调用内联函数的地方展开,类似宏,没有函数调用建立栈帧的开销,内联函数提升了程序的效率

1.2 应用

示例:

#include <iostream>
using namespace std;

//inline int Add(int x,int y)
int Add(int x, int y)
{
	int ret = x + y;
	return ret;
}
int main()
{
	int ret = Add(3, 5);
	cout << ret << endl;
	return 0;
}

没使用内联函数:是通过call 函数名 来调用函数
在这里插入图片描述
使用内联函数:在调用函数的地方展开,直接加
在这里插入图片描述

1.3 特性

  1. 内联函数对编译器来说只是一个建议,并不是加上inline,编译器就会当作内联函数处理,只有一些短的函数,不递归且频繁调用的函数会使用作内联函数
  2. 内联函数是一种用空间换时间的方法,在编译时,会展开内联函数替换函数调用,缺点:可能会使目标文件变大 优点:不需要建立函数栈帧,提升了程序的效率
  3. 内联函数的声明和定义不能分离,如果分离了,在inline被展开的时候,就找不到函数地址了,会造成链接错误

二、auto关键字

2.1 简介

auto作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得

TIPS:可以使用typeid(变量名).name()来查看auto的实际类型

#include <iostream>
using namespace std;

int Add(int x, int y)
{
	return x + y;
}
int main()
{
	auto a = 10;
	auto b = 'x';
	auto c = &a;
	auto d = Add(3,5);

	cout << typeid(a).name() << endl;
	cout << typeid(b).name() << endl;
	cout << typeid(c).name() << endl;
	cout << typeid(d).name() << endl;

	return 0;
}

代码运行结果:
int
char
int *
int

2.2 auto的详细使用

  1. auto与指针和引用
#include <iostream>
using namespace std;

int main()
{
	auto a = 10;
	auto b = &a;
	auto* c = &a;
	auto& d = a;

	cout << typeid(a).name() << endl;
	cout << typeid(b).name() << endl;
	cout << typeid(c).name() << endl;
	cout << typeid(d).name() << endl;

	return 0;
}

代码运行结果:
int
int *
int *
int

TIPS:auto用来声明指针类型时,auto 与 auto* 是没有区别的,但是auto声明引用时,只能是 auto&

  1. auto声明多个变量
#include <iostream>
using namespace std;


int main()
{
	auto a = 10, b = 20;
	//auto c = 30, d = 40.0; 报错

	cout << typeid(a).name() << endl;
	cout << typeid(b).name() << endl;
	
	return 0;
}

在一次声明多个变量时,变量类型得一致,因为编译器只能对一个类型进行推导,然后再用推导出来的类型定义其他变量

2.3 范围for(C++)

普通的打印数组:

#include <iostream>
using namespace std;

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
		cout << arr[i] << " ";
	}
	return 0;
}

范围for打印数组:

#include <iostream>
using namespace std;

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	for (auto e : arr)
	{
		cout << e << " ";
	}
	return 0;
}

范围for有两个部分组成

  1. auto e 范围内用于迭代的变量
  2. arr 被迭代的范围

注意:
范围for是将数组中的值赋值给变量,不能修改数组的值,所以可以在变量前加上引用& auto& e
和普通的for循环一样,可以使用 break 跳出循环 和 continue 结束本次循环

2.4 注意事项

  1. auto定义变量时,必须初始化,在编译阶段,编译器会根据初始化表达式来推到auto的类型,因此,auto只是一个类型声明时的占位符,在编译阶段会替换成实际的类型
  2. auto不能作为函数的返回值
  3. auto不能用来声明数组
  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

4U247

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值