IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++入门篇-----inline,auto,nullptr -> 正文阅读

[C++知识库]C++入门篇-----inline,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

例如:
在这里插入图片描述

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-15 11:29:21  更:2022-05-15 11:30:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 18:57:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码