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中的一些新特性的应用介绍。
相关文章:
C++11中新特性介绍-之(二)
11.自动类型推导 (1) auto类型自动推导 auto自动推导变量的类型 auto并不代表某个实际的类型,只是一个类型声明的占位符 auto并不是万能的在任意场景下都能推导,使用auto声明的变量必须进行初始化,以让编译器推导出它的实际类型,…...
STM32实现看门狗(HAL库)
文章目录 一. 看门狗1. 独立看门狗(IWDG)1.1 原理1.2 相关配置1.3 相关函数 2. 窗口看门狗(WWDG)2.1 原理2.2 相关配置2.3 相关函数 一. 看门狗 单片机在日常工作中常常会因为用户配置代码出现BUG,而导致芯片无法正常工…...
【漏洞复现】网络摄像头——弱口令
声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现其他补充 漏洞描述 主流网络摄像头存在弱口令。 漏洞复现 JAWS 1)信息…...
视觉图像面积计算
在图像处理和计算机视觉中,计算对象面积的常见方法有两种:使用四邻域标记算法和使用轮廓计算。每种方法在不同情况下有各自的优缺点。 四邻域标记算法: 优点: 简单易实现。能够处理带有孔洞的复杂区域(只要孔洞不影响连…...
Vue笔记10-其它Composition API
shallowReactive与shallowRef shallow:浅的,和deep相反 shallowReactive:只处理对象最外层属性的响应式 shallowRef:只处理基本数据类型的响应式,不进行对象的响应式处理 如果有一个对象数据,结构比较深&a…...
AI集成工具平台一站式体验,零门槛使用国内外主流大模型
目录 0 写在前面1 AI艺术大师1.1 绘画制图1.2 智能作曲 2 AI科研助理2.1 学术搜索2.2 自动代码 3 AI智能对话3.1 聊天机器人3.2 模型竞技场 4 特别福利 0 写在前面 人工智能大模型浪潮滚滚,正推动着千行百业的数智化进程。随着技术演进,2024年被视为是大…...
北京交通大学学报
《北京交通大学学报》是经新闻出版广电总局批准,由教育部主管,北京交通大学主办的自然科学理论与技术类学术期刊。学报致力于全面反映交通运输和信息与通信领域相关学科的最新研究进展。主要刊登交通运输工程、系统科学、信息与通信工程、控制科学与工程…...
【LinuxC语言】手撕Http之处理POST请求
文章目录 前言声明POST的组成读取POST信息读取消息体长度读取消息体解析消息体How to use?总结前言 在互联网的世界中,HTTP协议无疑是最重要的协议之一。它是Web的基础,支持着我们日常生活中的大部分在线活动。尽管有许多现成的库可以处理HTTP请求,但了解其底层工作原理是…...
以软件定义推动智算中心建设
2024 年 6 月 27 日,由益企研究院和 CDCC 主办、OCTC 开放计算委员会协办、隆高展览承办的"2024 中国智算中心全栈技术大会、第 5 届中国数据中心绿色能源大会暨第 10 届中国(上海)国际数据中心产业展览会”在上海圆满结束。本次大会以&…...
Apache Seata分布式事务原理解析探秘
本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 前言 fescar发布已有时日,分布式事务一直是业界备受关注的领域,fesca…...
MySQL-18-mysql source 执行 sql 文件时中文乱码
拓展阅读 MySQL 00 View MySQL 01 Ruler mysql 日常开发规范 MySQL 02 truncate table 与 delete 清空表的区别和坑 MySQL 03 Expression 1 of ORDER BY clause is not in SELECT list,references column MySQL 04 EMOJI 表情与 UTF8MB4 的故事 MySQL 05 MySQL入门教程&a…...
flutter环境安装(Mac+vscode)
以前据说flutter跨平台开发app很牛逼,最近突然想到这个东西,于是想体验一下flutter的开发流程,看看能否适合做独立开发。 我用的是mac,手机也是ios,就开始着手部署mac下的开发环境了。 开发后台的时候,一…...
【题解】—— LeetCode一周小结27
🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 【题解】—— 每日一道题目栏 上接:【题解】—— LeetCode一周小结26 2024.7 1.最大化一张图中的路径价值 题目链接:…...
C++后端开发--网络编程基础
目录 一、网络编程基础概念 1.1 网络协议 1.2 IP地址和端口号 1.3 Socket 1.4 TCP协议的三次握手和四次挥手 TCP的三次握手 TCP的四次挥手 整个流程更通俗易懂 TCP 三次握手流程图 TCP 四次挥手流程图 1.5 详细介绍一下http协议 HTTP协议的主要特点 HTTP请求 HTT…...
如何将资源前端通过 Docker 部署到远程服务器
作为一个程序员,在开发过程中,经常会遇到项目部署的问题,在现在本就不稳定的大环境下,前端开发也需要掌握部署技能,来提高自己的生存力,今天就详细说一下如何把一个前端资源放到远程服务器上面通过docker部…...
@react-google-maps/api实现谷歌地图嵌入React项目中,并且做到点击地图任意一处,获得它的经纬度
1.第一步要加入项目package.json中或者直接yarn install它都可以 "react-google-maps/api": "^2.19.3",2.加入项目中 import AMapLoader from amap/amap-jsapi-loader;import React, { PureComponent } from react; import { GoogleMap, LoadScript, Mar…...
【MySQL】2.库的操作
库的操作 一.创建数据库1.数据库的编码集 二.查看数据库三.修改数据库四.删除数据库五.数据库的备份和恢复 一.创建数据库 create database [if not exists] db_name [charsetutf8] [collateutf8_general_ci] //创建一个名为db_name的数据库,本质就是在/var/lib/my…...
深入Laravel服务容器:构建灵活应用的秘诀
标题:深入Laravel服务容器:构建灵活应用的秘诀 Laravel框架的服务容器是一个强大的工具,它负责管理类的依赖关系和执行依赖注入(DI)。服务容器是Laravel依赖注入系统的核心,使得应用组件之间的耦合度降低&…...
3.js - 模板渲染 - 金属切面效果
md,狗不学,我学 源码 // ts-nocheck// 引入three.js import * as THREE from three// 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls// 导入lil.gui import { GUI } from three/examples/jsm/libs/lil-gui.m…...
【测试】系统压力测试报告模板(Word原件)
系统压力测试,简而言之,是在模拟高负载、高并发的环境下,对系统进行全面测试的过程。它旨在评估系统在面对极端使用条件时的性能表现,包括处理能力、响应时间、资源消耗及稳定性等关键指标。通过压力测试,开发团队能够…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
