3.C++入门(内联函数,c++11,auto,范围for,nullptr)

news2025/1/11 21:06:18

⭐本篇文章为C++学习的第三篇:主要了解内联函数和部分c++11新特性

⭐本人c++代码的Gitee仓库:c++学习 · 橘子真甜/yzc的c++学习 - 码云 - 开源中国 (gitee.com)

一. 内联函数

        以inline修饰的函数称为内联函数,编译的时候c++编译器会在内联函数的地方展开,这样就没有函数栈帧的开销,从而提高效率。

        1.inline是一种用空间换取时间的做法,在编译阶段,使用函数体替换函数调用

        2.一般将函数规模小,无递归,且频繁调用的函数作为内联函数        

        3.不要将inline函数的声明和定义分离,这样会导致链接错误。由于inline函数被展开,就没有函数地址,链接就找不到。

面试题:宏的优缺点,c++有哪些技术可以替代宏?

优点:

        1. 增强代码的复用性

        2. 提高性能

缺点:

        1. 预编译阶段会宏替换,不方便调试

        2. 代码可读性差,可维护性差,容易误用

        3. 没有类型安全检查

宏常量:

        可以使用const关键字定义常量

宏函数:

        可以使用inline关键字定义内联函数替换宏

二. C++11新特性 

2.1 自动推导 auto

随着程序变复杂,很多变量的类型也变复杂。如

1. 类型名称长且难写

2. 含义不明确导致出错

//定义一个变量it
std::map<std::string, std::string>:: iterator it;

为了解决这一问题,c++11使用了auto

auto是一个新的类型指示符来指示编译器,auto声明的变量必须在编译器的编译时期推导而得。且使用auto定义变量的时候必须对其进行初始化

举例:

#include<iostream>
using namespace std;


int main()
{
	int a = 10;
	string s = "hello world";

	auto b = a;
	auto& str = s;
	cout << "a=" << a << " b=" << b << endl;
	cout << "s=" << s << " str=" << str << endl;

	return 0;
}

 

auto使用细则:

1. auto一般与指针和引用结合起来使用,auto定义指针无需加上*, 定义引用必须加&


int main()
{
	int a = 10;
	string s = "hello world";

	auto b = &a;
	auto& str = s;
}

2. auto可以在同一行定义多个变量,但这些变量必须是同一类型

3.auto定义变量不能作为函数的参数,不能用来声明数组

2.2 基于范围的for循环

        c++11有一个新的for循环来遍历数组等变量。

格式为: for循环后面的括号由 : 分为两部分,第一部分是范围for用于迭代遍历的变量,后一部分是迭代遍历的范围

在范围for中,可以使用continue结束此次循环,也能使用break跳出循环

举例:

#include<iostream>
using namespace std;


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

	//范围for,使用auto自动推导元素e的变量,范围在整个arr中
	for (auto& e : arr)
	{
		cout << e << " ";
	}
	cout << endl;

	return 0;
}

运行结果:

范围for使用的条件:

1. for循环的范围是确定的,不确定无法遍历

2. 迭代的对象需要实现运算符重载++和==

2.3 指针空值nullptr

        在c++98中。NULL被定义为常量0或者(void*),这样会有一些错误,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量,但是编译器 默认情况下将其看成是一个整形常量,如果要将其按照指针方式来使用,必须对其进行强转(void *)0。

1. 在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入 的

2. 在C++11中,sizeof(nullptr) 与 sizeof((void*)0)所占的字节数相同。

3. 为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2131359.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI 平台 formulabot 介绍

AI 平台 formulabot 介绍 FormulaBot.com 是一个基于人工智能的数据分析平台&#xff0c;旨在简化数据处理和分析任务 主要功能 数据分析与可视化: Formula Bot 提供工具来分析、可视化和转换数据&#xff0c;使用户能够快速理解数据背后的信息。公式生成: 用户可以通过自然…

别再过度复杂化了,实体SEO其实就是SEO

“实体SEO”。听起来有点可怕&#xff0c;是不是&#xff1f;不仅“实体”这个词听起来有点陌生&#xff0c;还感觉又是要在你永无止境的SEO待办清单上再添加一项。你在SEO方面已经捉襟见肘了&#xff0c;但天啊&#xff0c;又有一个新事物需要你投入稀缺的资源。 不过我有好消…

springboot-创建连接池

操作数据库 代码开发步骤&#xff1a; pom.xml文件配置依赖properties文件配置连接数据库信息&#xff08;连接池用的是HikariDataSource&#xff09;数据库连接池开发 configurationproperties和value注解从properties文件中取值bean方法开发 service层代码操作数据库 步骤&am…

component 和slot -----vue3

前言: 辗转几个公司发现基本上有点规模的公司都会有自己的平台,无论是开发平台还是其他什么,都脱离不了一个功能点,那就是组件;无论你是自己从0到1建立的平台还是基于别的已有的平台,都是这样;无非是组件的套娃,只要你梳理清楚平台的主要枝干,熟悉一些前端基本知识,然后掌握组件…

2024年CAD图纸加密软件大盘点:10款高效CAD加密工具大揭秘!

在当今数字化时代&#xff0c;CAD图纸的安全性变得尤为重要。随着设计数据的不断增长&#xff0c;保护这些敏感信息免受未经授权的访问和泄露已成为企业必须面对的挑战。为了应对这一需求&#xff0c;市场上涌现了众多CAD图纸加密软件。本文将为您盘点2024年最值得关注的10款高…

OpenAI 的 o1 大模型在数学和编码方面有了几乎 10 倍的能力提升!

你有没有想过,有一天人工智能可以在数学和编程这两个领域里,真正成为人类的“得力助手”,甚至是超越我们?最近,OpenAI 发布的 o1大模型在这方面取得了几乎 10 倍的能力提升。10 倍!你没有看错。这样的进步让人不禁怀疑:AI 真的能做到“秒懂”数学和编程吗?今天,我们就…

骨传导耳机品牌排行榜前五名,有哪些好用的骨传导耳机品牌值得入手?

我是一名专业的数码产品测评博主&#xff0c;在多年的职业生涯中&#xff0c;发现很多人在使用骨传导耳机后都出现了佩戴不舒服的现象。对此&#xff0c;我希望大家能重视骨传导耳机款式的挑选&#xff0c;因为市面上不专业的产品数量众多&#xff0c;它们纷纷打着保护听力的旗…

【Python爬虫系列】_019.生产者和消费者模型

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈PyQt5 系 列 教 程:👉👉 Python

服务器数据恢复—Linux操作系统环境下网站数据的恢复案例

服务器数据恢复环境&#xff1a; 一台linux操作系统服务器上跑了几十个网站&#xff0c;服务器上只有一块SATA硬盘。 服务器故障&#xff1a; 服务器突然宕机&#xff0c;尝试再次启动失败。将硬盘拆下检测&#xff0c;发现存在坏扇区。找当地一家数据恢复公司处理后&#xff…

Application pool xxx has been disabled

现象&#xff1a; 项目采用分布式应用&#xff0c;总共三台服务器&#xff0c;第一台的某个应用无法访问报错Error: Service Layer is under maintenance&#xff0c;第二三台可以正常访问 问题排查&#xff1a; 通过排查ETW&#xff08;无任何报错&#xff09;和EventLog发现…

一款免费试用的答题小程序

一款可以免费试用的答题PK小程序。适用于各类知识竞赛答题活动。如网络安全知识竞赛、安全生产知识竞赛、交通知识竞赛答题、企业文化学习答题等。 其功答题功能丰富多彩&#xff0c;除了个人学习答题外&#xff0c;还有好友PK答题、排位升级PK答题、专题1V1pk答题、团队多人…

Android Framework(五)WMS-窗口显示流程——窗口布局与绘制显示

文章目录 relayoutWindow流程概览应用端处理——ViewRootImpl::setView -> relayoutWindowViewRootImpl::setViewViewRootImpl::performTraversalsViewRootImpl::relayoutWindow Surface的创建WindowManagerService::relayoutWindow了解容器类型和Buff类型的SurfaceBuff类型…

为什么要引入lims系统?第三方检测实验室lims系统的好处

第三方检测机构面临多样化的管理和数据处理问题&#xff0c;实验室信息管理系统(LIMS)成为了提升效率和准确性的关键工具。本文将探讨第三方检测机构为什么要引进LIMS系统&#xff0c;并详细介绍白码LIMS系统的优势及应用案例&#xff0c;帮助各类检测机构解决实际难题。 白码…

低代码平台与AI融合:企业如何快速实现数字化转型?

引言&#xff1a;数字化转型的迫切性 在当今高度竞争的市场环境中&#xff0c;数字化转型已成为企业生存与发展的关键因素。无论是中小型企业&#xff0c;还是跨国巨头&#xff0c;都面临着相似的挑战&#xff1a;如何在信息技术飞速发展的背景下&#xff0c;快速适应市场变化&…

Docker容器技术1——docker基本操作

Docker容器技术 随着云计算和微服务架构的普及&#xff0c;容器技术成为了软件开发、测试和部署过程中的重要组成部分。其中&#xff0c;Docker作为容器技术的代表之一&#xff0c;以其简便易用的特点赢得了广大开发者的青睐。 Docker允许开发者在轻量级、可移植的容器中打包和…

举个例子简单告诉你什么是期货期权?

期权&#xff0c;本质上是一种在未来是否决定行使的权益&#xff0c;它预设了当前对未来某一经济行为的权利选择。期权分为买权&#xff08;或称看涨期权&#xff09;与卖权&#xff08;或称看跌期权&#xff09;&#xff0c;分别代表了未来买入或卖出资产的权利。 以黄豆市场…

Qt-QRadioButton控件(23)

目录 描述 相关API 使用 添加默认选项 禁用其他选项 四种触发槽函数的方式 模拟一个点餐系统 分组 描述 这个就是用来做那个单选按钮的&#xff0c;就是几个选择中选一个&#xff0c;默认只能选一个 相关API 使用 创建新项目&#xff0c;如下 添加槽函数&#xff0c;…

新升级|模型面数更少!优化管道/圆柱形模型、直线边曲面模型选用不同的策略

天元轻量化软件的【微分CAD】功能&#xff0c;采用创新智能算法&#xff0c;将CAD模型的曲面化数据自动转换为多边形数据。用户只需要对CAD零件模型预先设定好关键参数&#xff0c;就可以在数十秒内得到一个经过优化处理的3D零件模型。整个转换过程无需人手操作&#xff0c;实现…

什么是人力资源管理软件?HR人力软件有哪些功能?

在人力资源管理中&#xff0c;随着科技的迅猛发展和商业环境的日益复杂化&#xff0c;企业对人力资源管理系统&#xff08;eHR&#xff09;的需求不断增加。人力资源管理软件&#xff0c;简称eHR&#xff0c;是一种融合了系统学理论方法的管理工具&#xff0c;旨在通过技术手段…

保姆级教程:利用大模型与高德地图API,轻松实现查找附近咖啡店

随着人工智能和地图服务的迅速发展&#xff0c;我们可以轻松地利用这些工具实现各种便捷功能。例如&#xff0c;通过整合OpenAI的大模型和高德地图API&#xff0c;可以快速查找某个地址附近的咖啡店。本文将介绍如何通过远程调用和多功能调用大模型&#xff0c;结合高德地图API…