C++11中新特性介绍-之(二)

11.自动类型推导

(1) auto类型自动推导
auto自动推导变量的类型
auto并不代表某个实际的类型,只是一个类型声明的占位符
auto并不是万能的在任意场景下都能推导,使用auto声明的变量必须进行初始化,以让编译器推导出它的实际类型,在编译时将auto转换成实际的类型
当变量不是指针或者引用时,推导的结果中不会保留const,volatile关键字;当变量时指针或者引用时,推导的结果会保留const,volatile关键字
auto不能使用的场景:
1.auto不能做函数参数,因为用auto做形参就相当于没有对变量做初始化,auto就无法导出;
2.不能用于类的非静态成员变量的初始化,因为非静态成员变量是属于对象,而对象只有被创建出来才知道类型;
3.不能使用auto关键字定义数组;
4.不能使用auto推导出模板参数;
auto建议使用的场景:
1.用于STL容器的遍历;
2.用于泛型编程;
(2)decltype类型推导
某些时候不需要或者不能定义变量,但又希望得到某种类型,这就可以用decltype,decltype在编译期间推导出一个表达式的类型,如:int x=18; decltype(x) a=x;即通过x来推导a的类型
推导规则:
1.表达式为普通变量或者普通表达式或者时类表达式,使用decltype推导出的类型和表达式的类型一致;
2.表达式是函数,使用decltype推导出的类型和函数的返回值一致(如果返回值有const,volatile限定符修饰,则限定符被忽略);
3.表达式是一个左值或者被( )包着,使用decltype推导出的是表达式类型的引用(如果返回值有const,volatile限定符修饰,则限定符被忽略);
decltype的应用场景:
1.多应用于泛型编程中,因为泛型编程中存在大量的不确定类型;

12.final使用

final用来限制某个类不能被继承,或者某个虚函数不能被重写
final修饰函数时,只能修饰虚函数,而且要把final关键字放到类或者函数的后面。当用final修饰了某个虚函数,就能阻止子类再去重写父类的这个虚函数了。
final修饰类时,把final写在类名的后面,表示这个类就不再允许被继承了,也就是这个类不再有派生类了

13.using使用

早期作用:用于声明命名空间,使用命名空间可以防止命名冲突;用户子类调用被隐藏的父类的同名的方法;
新作用:定义类型的别名,注意using实际只是对原来类型起了个别名,而不是定义一个新的类型,使用方法:using 新类型 = 旧的类型,如:using my_int = int;
使用using替换typedef来定义函数指针使代码容易阅读,早期使用typedef来定义函数指针,如:typedef int (func)(int, string);改为使用using定义:using func = int()(int, string);
using可以给模板指定别名,typedef则不行

14.右尖括号

早期C++编译器将两个右尖括号解析成右移操作符
新特性中,改进了编译器的解析规则,尽可能的将多个右尖括号解析成模板参数结束符

15.override使用

override是用来确保派生类中要重写的函数与基类的对应的虚函数有相同的签名,同时明确表示将会重写基类的该函数
override写在函数的后面,显示的声明该函数是重写的,编译器会检查该函数与父类的虚函数的类型.

16.返回值类型后置

把函数的返回值类型,写在函数声明体的后面,auto func(参数1,参数2,…) -> decltype(参数表达式),其中"->"代表返回类型后置,后面跟单就是返回的类型, 如:

template <typename T, typename U>
auto add(T t, U u) ->decltype(t+u){...}
17.委托构造函数

C11新增委托构造函数(也叫代理构造函数),是在一个构造函数中调用其他的构造函数,形成一种链式的调用,使得代码更简洁。一般被调用的构造函数写在调用者的后面,如一个Test类中:Test(int max){…}; Test(int max, int min){…}; 如果第二个构造函数需要调用第一个构造函数,则可以改为:Test(int max, int min):Test(max) {…};
使用注意:1.这种链式的构造函数不能形成一个闭环,否则运行异常;
2.在初始化列表中调用了委托构造函数初始化某个类成员变量后,就不能在初始化列表中再次初始化这个变量了.

18.继承构造函数

C11新增继承构造函数,可以让派生类直接使用基类的构造函数,而无需自己再写构造函数。尤其是基类有很多构造函数的情况下,可以极大简化派生类的编写。
使用方式:
1.在子类中用using来声明继承父类的构造;
写法:using Base::Base; 即可;
2.在子类中调用父类的函数,写法:using Base::func;

19.仿函数

仿函数就是使一个类的使用看上去像一个函数,就是类中实现一个operator(),这个类就有了类似函数的行为,就变成一个仿函数类了,所以,仿函数不是函数而是类,仿函数重载了()运算符,拥有了函数的行为
仿函数主要适用于模板类和模板函数,当不确定类型时,保证依然适用于所有类型.
在这里插入图片描述

以上,即是C11中的一些新特性的应用介绍。

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

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

相关文章

深入探索 Python 中的数据维数:高维数据处理方法与应用

Python 数据维数 在数据科学和机器学习领域&#xff0c;理解数据的维度是至关重要的。Python作为一种强大而灵活的编程语言&#xff0c;提供了丰富的工具和库来处理各种维度的数据。本文将介绍Python中数据维数的概念&#xff0c;以及如何使用Python库来处理不同维度的数据。 什…

算法思想总结:优先级队列

一、最后一块石头的重量 . - 力扣&#xff08;LeetCode&#xff09; 我们每次都要快速找到前两个最大的石头进行抵消&#xff0c;这个时候用优先级队列&#xff08;建大堆&#xff09;,不断取堆顶元素是最好的&#xff01;每次删除堆顶元素后&#xff0c;可以自动调整&#xf…

爬虫怎么实现抓取的

1.4爬虫工程师常用的库通过图1-3我们了解到&#xff0c;爬虫程序的完整链条包括整理需求、分析目标、发出网络请求、文本解析、数据入库和数据出库。其中与代码紧密相关的有&#xff1a;发出网络请求、文本解析、数据入库和数据出库&#xff0c;接下来我们将学习不同阶段中爬虫…

SOAMANAGER 弹不出浏览器

SOAMANAGER 弹不出浏览器 一、打开SOAMANAGER的其他方法 使用事务码SICF打开SOAMANAGER,执行路径default_host/sap/bc/webdynpro/sap/appl_soap_management 使用SE24对类CL_GUI_HTML_VIEWER中的方法DETACH_URL_IN_BROWSER 打断点 在前台创建一个URL的链接。

数组算法(二):交替子数组计数

1. 官方描述 给你一个二进制数组nums 。如果一个子数组中 不存在 两个 相邻 元素的值 相同 的情况&#xff0c;我们称这样的子数组为 交替子数组 。 返回数组 nums 中交替子数组的数量。 示例 1&#xff1a; 输入&#xff1a; nums [0,1,1,1] 输出&#xff1a; 5 解释&#…

Spring IOC基于XML和注解管理Bean

IoC 是 Inversion of Control 的简写&#xff0c;译为“ 控制反转 ”&#xff0c;它不是一门技术&#xff0c;而是一种设计思想&#xff0c;是一个重要的面向对象编程法则&#xff0c;能够指导我们如何设计出 松耦合、更优良的程序。 Spring 通过 IoC 容器来管理所有 Java 对象…

【Unity】在Unity中制作一个小车游戏

目录 第一步&#xff1a;设置Unity项目 第二步&#xff1a;设置场景 第三步&#xff1a;添加车辆控制脚本 第四步&#xff1a;将脚本附加到车辆上 第五步&#xff1a;运行和测试 第六步&#xff1a;添加更多功能&#xff08;可选&#xff09; 在Unity中制作一个小车游戏…

webGL可用的14种3D文件格式,但要具体问题具体分析。

hello&#xff0c;我威斯数据&#xff0c;你在网上看到的各种炫酷的3d交互效果&#xff0c;背后都必须有三维文件支撑&#xff0c;就好比你网页的时候&#xff0c;得有设计稿源文件一样。WebGL是一种基于OpenGL ES 2.0标准的3D图形库&#xff0c;可以在网页上实现硬件加速的3D图…

MySQL之备份与恢复和MySQL用户工具(一)

备份与恢复 备份脚本化 为备份写一些脚本是标准做法。展示一个示例程序&#xff0c;其中必定有很多辅助内容&#xff0c;这只会增加篇幅&#xff0c;在这里我们更愿意列举一些典型的备份脚本功能&#xff0c;展示一些Perl脚本的代码片段。你可以把这些当作可重用的代码块&…

算法012:将x减到0的最小操作数

将x减到0的最小操作数. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/minimum-operations-to-reduce-x-to-zero/ 这个题使用到的是滑动窗口。 乍一看&#xff0c…

web安全基础名词概念

本节内容根据小迪安全讲解制作 第一天 域名&#xff1a; 1.1什么是域名&#xff1f; 网域名称(英语&#xff1a;Domain Name&#xff0c;简称&#xff1a;Domain)&#xff0c;简称域名、网域&#xff0c;是由一串用点分隔的字符组成的互联网上某一台计算机或计算机组的名称&a…

【系统架构设计师】八、系统工程基础知识(系统工程|系统性能)

目录 一、系统工程 1.1 系统工程的方法 1.1.1 霍尔的三维结构 1.1.2 切克兰德方法 1.1.3 并行工程方法 1.1.4 综合集成法 1.1.5.WSR 系统方法。 二、系统工程生命周期 2.1 系统工程生命周期7阶段 2.2 生命周期方法 三、基于模型的系统工程(MBSE) 四、系统性能 4.1…

昇思大模型第19天打卡|SSD目标检测

模型简介 SSD&#xff0c;全称Single Shot MultiBox Detector&#xff0c;是Wei Liu在ECCV 2016上提出的一种目标检测算法。使用Nvidia Titan X在VOC 2007测试集上&#xff0c;SSD对于输入尺寸300x300的网络&#xff0c;达到74.3%mAP(mean Average Precision)以及59FPS&#xf…

LeetCode 189.轮转数组 三段逆置 C写法

LeetCode 189.轮转数组 C写法 三段逆置 思路: 三段逆置方法:先逆置前n-k个 再逆置后k个 最后整体逆置 由示例1得&#xff0c;需要先逆置1,2,3,4 再逆置5,6,7&#xff0c;最后前n-k个与后k个逆置 代码 void reverse(int*num, int left, int right) //逆置函数 { while(left …

【qt】获取主机信息系统

话不多说,先一睹芳颜! 如果你也想达到这种效果,那咱们就开始吧! 目录 一.登录界面设计1.ui登录设计 二.加载界面1.lineEdit的密码输入模式2.lineEdit按回车跳转的信号3.密码的判断4.创建加载界面5.创建定时器来进行进度条的移动6.定时器执行的槽函数 三.主机信息界面1.主机信息…

阶段三:项目开发---大数据开发运行环境搭建:任务3:安装配置Hadoop集群

任务描述 知识点&#xff1a;安装配置Hadoop 重 点&#xff1a; 安装配置Hadoop 难 点&#xff1a;无 内 容&#xff1a; Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下&#xff0c;开发分布式程序。充分利用集群的威…

深度卷积神经网络 AlexNet

一、机器学习深度学习的发展 1、机器学习SVM方法 &#xff08;1&#xff09;20世纪90年代&#xff0c;基于统计学习理论的结果&#xff0c;开发了一种新型的学习算法——支持向量机&#xff08;SVM&#xff09;。这就产生了一类新的理论上优雅的学习机器&#xff0c;它们将SVM…

【智能算法应用】灰狼算法求解二维栅格路径规划问题

目录 1.算法原理2.二维路径规划数学模型3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】灰狼算法&#xff08;GWO&#xff09;原理及实现 2.二维路径规划数学模型 栅格法模型最早由 W.E. Howden 于 1968 年提出&#xff0c;障碍物的栅格用黑色表示&#xff0c;可通…

【数据结构与算法】详解二叉树下:实践篇————通过链式结构深入理解并实现二叉树

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​ 目录 一、二叉树前置知识 二、二叉树链式结构实现的结构定义 三、二叉树的基本实现 &…

仿哔哩哔哩视频app小程序模板源码

仿哔哩哔哩视频app小程序模板源码 粉色的哔哩哔哩手机视频网页&#xff0c;多媒体视频类微信小程序ui前端模板下载。包含&#xff1a;视频主页和播放详情页。 仿哔哩哔哩视频app小程序模板源码