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

⭐本篇文章为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.rhkb.cn/news/423067.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GBase 8c V5_3.0.0 分布式数据库常用维护命令】

一、查看数据库状态/检查&#xff08;gbase用户&#xff09; 1.gha_ctl monitor 使用gha_ctl monitor查看节点运行情况(跟dcs的地址和端口) gha_ctl monitor -c gbase -l http://172.20.10.8:2379 -Hall |coordinator | datanode | gtm | server|dcs:必选字段。指定查看哪类集…

【有啥问啥】探索扫地机器人中的 SLAM 算法:原理、实现与未来展望

探索扫地机器人中的 SLAM 算法&#xff1a;原理、实现与未来展望 随着智能家居的普及&#xff0c;扫地机器人逐渐成为日常生活中的常见家电。其自主导航能力使得它能够在复杂的家庭环境中高效完成清洁任务&#xff0c;而这背后的核心技术之一就是 SLAM&#xff08;Simultaneou…

【文件包含】——日志文件注入

改变的确很难&#xff0c;但结果值得冒险 本文主要根据做题内容的总结&#xff0c;如有错误之处&#xff0c;还请各位师傅指正 一.伪协议的失效 当我们做到关于文件包含的题目时&#xff0c;常用思路其实就是使用伪协议&#xff08;php:filter,data,inpput等等&#xff09;执行…

shader 案例学习笔记之step函数

step函数 参数是float step(edge,x)&#xff1a;当x>edge时返回1&#xff0c;否则返回0 #ifdef GL_ES precision mediump float; #endifuniform vec2 u_resolution;void main(){vec2 st gl_FragCoord.xy/u_resolution.xy;float f step(0.5, st.x);gl_FragColor vec4(f…

算法知识点————数论【最大公约数】【快速幂】【分解质因数】

结论1&#xff1a;两个互质的整数mn不能凑出的最大整数是(n-1)(m-1) -1 结论2:一个数的因数可以拆成n个质因数的乘积。 黄金分割&#xff1a;0.61803399 在数论中&#xff0c;如果两个或两个以上的整数的最大公约数是 1 &#xff0c;则称它们为互质。 最大公约数: 两数乘积最…

C语言:结构体

在前面我们已经介绍了整形&#xff0c;浮点型&#xff0c;字符型&#xff0c;还介绍了数组&#xff0c;字符串。但是在实际问题中只有这些数据类型是不够的&#xff0c;有时候我们需要其中的几种一起来修饰某个变量&#xff0c;例如一个学生的信息就需要学号&#xff08;字符串…

基础 Web 开发

1. 构建项目&#xff1a; 2.添加依赖 <dependencies> <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupI…

[ RK3566-Android11 ] 关于 RK628F 驱动移植以及调试说明

问题描述 我这个项目的SDK比较老&#xff0c;移植RK628F最新驱动的调试过程&#xff0c;踩了很多坑&#xff0c;希望大家别踩坑。 解决方案&#xff1a; 首先在FTP上下载最新的RK628的驱动 rk628-for-all-v27-240730 版本。 下载完后 不要直接替换&#xff0c;不要直接替换&a…

网络高级(学习)2024.9.10

目录 一、Modbus简介 1.起源 2.特点 3.应用场景 二、Modbus TCP协议 1.特点 2.协议格式 3.MBAP报文头 4.功能码 5.寄存器 &#xff08;1&#xff09;线圈寄存器&#xff0c;类比为开关量&#xff0c;每一个bit都对应一个信号的开关状态。 &#xff08;2&#xff09…

中学生考试成绩在线查询系统

时代在发展&#xff0c;社会在进步&#xff0c;传统的成绩发布方式已经显得力不从心了。老师们&#xff0c;是时候尝试一种更高效、更安全的成绩查询方式了。 还在为如何保护学生隐私而头疼&#xff1f;还在担心成绩的公平性和准确性&#xff1f;易查分小程序将这些这些问题都将…

安卓13禁止声音调节对话框 删除音量调节对话框弹出 屏蔽音量对话框 android13

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析3.1 方法13.2 方法24.代码修改4.1 代码修改方法14.2 代码修改方法25.编译6.彩蛋1.前言 客户需要,调整声音,不显示声音调节对话框了。我们在系统里面隐藏这个对话框。 2.问题分析 android在调整声音的…

部署Tomcat和抓包

部署Tomcat 复制文件到桌面 查看自己是否有java环境&#xff0c;下图所示是有的&#xff0c;若没有需另行下载 解压tomcat文件 tar -xzvf apache-tomcat-7.0.96.tar.gz 下列为tomcat文件的几个重要文件 进入到bin文件中 启动tomcat ./startup.sh 可以先用本机查看是否启动…

戴尔14代服务器配置IDRAC9远程配置说明

一、规划管理网段 规划管理网段&#xff0c;要求如下&#xff1a; 管理网段与业务网段不能使用同一网段&#xff1b;管理网段与业务网段不能直接互通&#xff1b;如有条件管理网与业务网使用不同设备接入。 二、配置服务器idrac 2.1、确认idrac口位置 2.2、开机进F2 2.3、 …

java程序员入行科目一之CRUD轻松入门教程(一)

之前在操作MySQL的时候&#xff0c;都是采用Navicat&#xff0c;或者cmd黑窗口。 无论使用什么方式和MySQL交互&#xff0c;大致步骤是这样的 建立连接&#xff0c;需要输入用户名和密码编写SQL语句&#xff0c;和数据库进行交互 这个连接方式不会变&#xff0c;但是现在需要 基…

(学习总结16)C++模版2

C模版2 一、非类型模板参数二、模板的特化1. 概念2. 函数模板特化3. 类模板特化全特化偏特化类模板特化应用示例 三、模板分离编译1. 什么是分离编译2. 模板的分离编译3. 解决方法 模板总结 以下代码环境为 VS2022 C。 一、非类型模板参数 模板参数分为类型形参与非类型形参。…

什么是CPU、GPU、NPU?(包懂+会)

目录 举例子 CPU&#xff1a;主厨 GPU&#xff1a;大量的厨房助理 NPU&#xff1a;面包机 总结 讲理论 CPU&#xff08;中央处理器&#xff09; GPU&#xff08;图形处理单元&#xff09; NPU&#xff08;神经网络处理单元&#xff09; 对比分析 举例子 CPU&#xff…

【代码随想录训练营第42期 Day55打卡 - 图论Part5 - 并查集的应用

目录 一、并查集 适用范围 三大基本操作 二、经典题目 题目&#xff1a;卡码网 107. 寻找存在的路径 题目链接 题解&#xff1a;并查集 三、小结 一、并查集 适用范围 动态连通性问题&#xff1a;并查集可以判断两个节点是否在同一个连通分量中&#xff0c;这在处理网络…

C语言——模拟实现strcat

strcat的作用是实现字符串的连接或者追加的 还是老样子我们先学会strcat的使用方式 int main() {char arr[30] "hello ";strcat(arr, "world");printf("%s", arr);return 0; } 库函数的规则了解了&#xff0c;那跟着之前讲过strcpy的逻辑改写。…

C++中的左值(Lvalue)和右值(Rvalue)详解

C中的左值&#xff08;Lvalue&#xff09;和右值&#xff08;Rvalue&#xff09;详解 在C中&#xff0c;左值&#xff08;Lvalue&#xff09;和右值&#xff08;Rvalue&#xff09;的概念是理解表达式和变量的重要基础。为了提高C的性能和灵活性&#xff0c;C11引入了一些新的…

springboot从分层到解耦

注释很详细&#xff0c;直接上代码 三层架构 项目结构 源码&#xff1a; HelloController package com.amoorzheyu.controller;import com.amoorzheyu.pojo.User; import com.amoorzheyu.service.HelloService; import com.amoorzheyu.service.impl.HelloServiceA; import o…