初识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不能用来声明数组

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-11 15:02:07       75 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-11 15:02:07       80 阅读
  3. 在Django里面运行非项目文件

    2024-04-11 15:02:07       64 阅读
  4. Python语言-面向对象

    2024-04-11 15:02:07       75 阅读

热门阅读

  1. 为什么俗套的电邮“钓鱼”攻击,频频得手

    2024-04-11 15:02:07       31 阅读
  2. 【c/c++】fprintf和fwrite使用及作用介绍

    2024-04-11 15:02:07       31 阅读
  3. Part1_带复位的8通道I2C开关PCA9548A使用方法介绍

    2024-04-11 15:02:07       34 阅读
  4. 关于c++的命名空间

    2024-04-11 15:02:07       30 阅读
  5. 水土流失监测设备解析

    2024-04-11 15:02:07       31 阅读
  6. 设计模式(013)行为型之观察者模式

    2024-04-11 15:02:07       29 阅读
  7. HTML中meta标签的作用

    2024-04-11 15:02:07       29 阅读
  8. SUBSTRING_INDEX 函数

    2024-04-11 15:02:07       28 阅读
  9. CPU怎么实现LOCK指令

    2024-04-11 15:02:07       38 阅读
  10. kafka

    kafka

    2024-04-11 15:02:07      29 阅读