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中的一些新特性的应用介绍。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

苏东坡传-读书笔记十

不管怎么说&#xff0c;能使读者快乐的确是苏东坡作品的一个特点。苏东坡最快乐就是写作之时。一天&#xff0c;苏东坡对朋友说&#xff1a;“我一生之至乐在执笔为文之时&#xff0c;心中错综复杂之情思&#xff0c;我笔皆可畅达之。我自谓人生之乐&#xff0c;未有过于此者也…

红黑树模拟实现

概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路径会比其他路径长出俩倍&#xff0c;因而是接近平衡…

昇思25天学习打卡营第20天|RNN实现情感分类

数据准备 使用IMDB影评数据集&#xff0c;包含Positive和Negative两类。 数据下载 import os import shutil import requests import tempfile from tqdm import tqdm from typing import IO from pathlib import Path# 指定保存路径为 home_path/.mindspore_examples cache…

蚓链实践告诉你“企业确保达成数字化营销效果的方法”

在如今这个数字化盛行的时代&#xff0c;企业想在激烈的市场竞争里崭露头角&#xff0c;确保数字营销效果那可是至关重要&#xff01;今天就来给大家聊聊实现这一目标的基本条件&#xff0c;来自蚓链数字化营销系统的广大用户体验总结。 一、精准的目标定位 企业一定要清楚地知…

第一作者讲述《生态系统架构:人工智能时代从业者的新思维》背后的故事:Episode One

当前&#xff0c;人工智能技术正不断渗透到各行各业&#xff0c;对企业和组织的系统和流程带来深刻的影响。生态系统架构可以帮助企业进行更好的规划和管理人工智能系统&#xff0c;使人工智能技术能够更好地为企业所用&#xff0c;从而实现企业的数字化转型和更好的商业表现。…

信号量——Linux并发之魂

欢迎来到 破晓的历程的 博客 引言 今天&#xff0c;我们继续学习Linux线程本分&#xff0c;在Linux条件变量中&#xff0c;我们对条件变量的做了详细的说明&#xff0c;今天我们要利用条件变量来引出我们的另一个话题——信号量内容的学习。 1.复习条件变量 在上一期博客中&…

HTML5实现我的音乐网站源码

文章目录 作者&#xff1a;[xcLeigh](https://blog.csdn.net/weixin_43151418) 1.设计来源1.1 界面效果1.2 轮播图界面1.3 音乐播放界面1.4 视频播放界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作…

DAY22-力扣刷题

1.被围绕的区域 方法一&#xff1a;深度优先搜索 class Solution {int n, m;public void solve(char[][] board) {n board.length;if (n 0) {return;}m board[0].length;for (int i 0; i < n; i) {dfs(board, i, 0);dfs(board, i, m - 1);}for (int i 1; i < m - 1…

项目方案:社会视频资源整合接入汇聚系统解决方案(九)-视频监控汇聚应用案例

目录 一、概述 1.1 应用背景 1.2 总体目标 1.3 设计原则 1.4 设计依据 1.5 术语解释 二、需求分析 2.1 政策分析 2.2 业务分析 2.3 系统需求 三、系统总体设计 3.1设计思路 3.2总体架构 3.3联网技术要求 四、视频整合及汇聚接入 4.1设计概述 4.2社会视频资源分…

5.opencv深浅拷贝

图像处理的复制操作 深浅拷贝 图像复制分成两种&#xff0c;第一种假复制&#xff0c;从原图片选择一部分图片拿出来观察&#xff0c;此时新生成的图片和原图实际上是同一张图片&#xff0c;即浅拷贝 将图片的一部分复制下来&#xff0c;放到新的内存中&#xff0c;即两张完全…

AI视频教程下载-使用ChatGPT成为全栈JavaScript开发者

学习使用Express JS和React JS进行全栈JavaScript开发 ChatGPT Express JS MongoDB React JS Tailwind 解锁全栈网页开发的世界&#xff0c;我们为初学者和中级学习者设计了全面的课程。在这段沉浸式的旅程中&#xff0c;你将深入前端和后端开发的基本概念&#xff0c;为自…

【DataSophon】DataSophon1.2.1 ranger usersync整合

目录 一、简介 二、实现步骤 2.1 ranger-usersync包下载编译 2.2 构建压缩包 2.3 编辑元数据文件 2.4 修改源码 三、重新安装 一、简介 如下是DDP1.2.1默认有的rangerAdmin&#xff0c; 我们需要将rangerusersync整合进来 ,实现将Linux机器上的用户和组信息同步到Ranger…

【Linux】线程(轻量级进程)

目录 一、线程概念 二、线程特性 2.1 进程更加轻量化 2.2 线程的优点 2.3 线程的缺点 2.4 线程的异常 2.5 线程用途 三、进程和线程 四、线程控制 4.1 包含线程的编译链接 4.2 创建线程 4.3 获得线程自身的ID 4.4 线程终止 4.5 线程等待 4.6 线程分离 4.6 线程…

Java数据结构9-排序

1. 排序的概念及引用 1.1 排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录…

【Java】垃圾回收学习笔记(一):Root Search 根可达算法+垃圾回收的起点

文章目录 1. 引用计数法优点缺点 2. 可达性分析 Root Search2.1 那些对象是GC Roots2.2 引用的分类2.3 回收方法区 3. 实现细节3.1 GC的起点&#xff1a;节点枚举OopMap&#xff1a;帮助高效的根节点枚举 3.2 何时开始GC&#xff1a;安全点与安全区域如何选取安全点如何让程序进…

在mac下 Vue2和Vue3并存 全局Vue2环境创建Vue3新项目(Vue cli2和Vue cli4)

全局安装vue2 npm install vue-cli -g自行在任意位置创建一个文件夹vue3&#xff0c;局部安装vue3,注意不要带-g npm install vue/cli安装完成后&#xff0c;进入目录&#xff0c;修改vue为vue3 找到vue3/node-moudles/.bin/vue&#xff0c;把vue改成vue3。 对环境变量进行配置…

web安全基础名词概念

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

java核心-泛型

目录 概述什么是泛型分类泛型类泛型接口泛型方法 泛型通配符分类 泛型类型擦除分类无限制类型擦除有限制类型擦除 问题需求第一种第二种 概述 了解泛型有利于学习 jdk 、中间件的源码&#xff0c;提升代码抽象能力&#xff0c;封装通用性更强的组件。 什么是泛型 在定义类、接…

存储过程编程-创建(CREATE PROCEDURE)、执行(EXEC)、删除(DROP PROCEDURE)

一、定义 1、存储过程是在SQL服务器上存储的已经编译过的SQL语句组。 2、存储过程分为三类&#xff1a;系统提供的存储过程、用户定义的存储过程和扩展存储过程 &#xff08;1&#xff09;系统提供的存储过程&#xff1a;在安装SQL Server时&#xff0c;系统创建了很多系统存…

Kafka(一)基础介绍

一&#xff0c;Kafka集群 一个典型的 Kafka 体系架构包括若Producer、Broker、Consumer&#xff0c;以及一个ZooKeeper集群&#xff0c;如图所示。 ZooKeeper&#xff1a;Kafka负责集群元数据的管理、控制器的选举等操作的&#xff1b; Producer&#xff1a;将消息发送到Broker…