当前位置: 首页 > news >正文

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并不代表某个实际的类型&#xff0c;只是一个类型声明的占位符 auto并不是万能的在任意场景下都能推导&#xff0c;使用auto声明的变量必须进行初始化&#xff0c;以让编译器推导出它的实际类型&#xff0c;…...

STM32实现看门狗(HAL库)

文章目录 一. 看门狗1. 独立看门狗&#xff08;IWDG&#xff09;1.1 原理1.2 相关配置1.3 相关函数 2. 窗口看门狗&#xff08;WWDG&#xff09;2.1 原理2.2 相关配置2.3 相关函数 一. 看门狗 单片机在日常工作中常常会因为用户配置代码出现BUG&#xff0c;而导致芯片无法正常工…...

【漏洞复现】网络摄像头——弱口令

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现其他补充 漏洞描述 主流网络摄像头存在弱口令。 漏洞复现 JAWS 1&#xff09;信息…...

视觉图像面积计算

在图像处理和计算机视觉中&#xff0c;计算对象面积的常见方法有两种&#xff1a;使用四邻域标记算法和使用轮廓计算。每种方法在不同情况下有各自的优缺点。 四邻域标记算法&#xff1a; 优点&#xff1a; 简单易实现。能够处理带有孔洞的复杂区域&#xff08;只要孔洞不影响连…...

Vue笔记10-其它Composition API

shallowReactive与shallowRef shallow&#xff1a;浅的&#xff0c;和deep相反 shallowReactive&#xff1a;只处理对象最外层属性的响应式 shallowRef&#xff1a;只处理基本数据类型的响应式&#xff0c;不进行对象的响应式处理 如果有一个对象数据&#xff0c;结构比较深&a…...

AI集成工具平台一站式体验,零门槛使用国内外主流大模型

目录 0 写在前面1 AI艺术大师1.1 绘画制图1.2 智能作曲 2 AI科研助理2.1 学术搜索2.2 自动代码 3 AI智能对话3.1 聊天机器人3.2 模型竞技场 4 特别福利 0 写在前面 人工智能大模型浪潮滚滚&#xff0c;正推动着千行百业的数智化进程。随着技术演进&#xff0c;2024年被视为是大…...

北京交通大学学报

《北京交通大学学报》是经新闻出版广电总局批准&#xff0c;由教育部主管&#xff0c;北京交通大学主办的自然科学理论与技术类学术期刊。学报致力于全面反映交通运输和信息与通信领域相关学科的最新研究进展。主要刊登交通运输工程、系统科学、信息与通信工程、控制科学与工程…...

【LinuxC语言】手撕Http之处理POST请求

文章目录 前言声明POST的组成读取POST信息读取消息体长度读取消息体解析消息体How to use?总结前言 在互联网的世界中,HTTP协议无疑是最重要的协议之一。它是Web的基础,支持着我们日常生活中的大部分在线活动。尽管有许多现成的库可以处理HTTP请求,但了解其底层工作原理是…...

以软件定义推动智算中心建设

2024 年 6 月 27 日&#xff0c;由益企研究院和 CDCC 主办、OCTC 开放计算委员会协办、隆高展览承办的"2024 中国智算中心全栈技术大会、第 5 届中国数据中心绿色能源大会暨第 10 届中国&#xff08;上海&#xff09;国际数据中心产业展览会”在上海圆满结束。本次大会以&…...

Apache Seata分布式事务原理解析探秘

本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 前言 fescar发布已有时日&#xff0c;分布式事务一直是业界备受关注的领域&#xff0c;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很牛逼&#xff0c;最近突然想到这个东西&#xff0c;于是想体验一下flutter的开发流程&#xff0c;看看能否适合做独立开发。 我用的是mac&#xff0c;手机也是ios&#xff0c;就开始着手部署mac下的开发环境了。 开发后台的时候&#xff0c;一…...

【题解】—— LeetCode一周小结27

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 【题解】—— 每日一道题目栏 上接&#xff1a;【题解】—— LeetCode一周小结26 2024.7 1.最大化一张图中的路径价值 题目链接&#xff1a;…...

C++后端开发--网络编程基础

目录 一、网络编程基础概念 1.1 网络协议 1.2 IP地址和端口号 1.3 Socket 1.4 TCP协议的三次握手和四次挥手 TCP的三次握手 TCP的四次挥手 整个流程更通俗易懂 TCP 三次握手流程图 TCP 四次挥手流程图 1.5 详细介绍一下http协议 HTTP协议的主要特点 HTTP请求 HTT…...

如何将资源前端通过 Docker 部署到远程服务器

作为一个程序员&#xff0c;在开发过程中&#xff0c;经常会遇到项目部署的问题&#xff0c;在现在本就不稳定的大环境下&#xff0c;前端开发也需要掌握部署技能&#xff0c;来提高自己的生存力&#xff0c;今天就详细说一下如何把一个前端资源放到远程服务器上面通过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的数据库&#xff0c;本质就是在/var/lib/my…...

深入Laravel服务容器:构建灵活应用的秘诀

标题&#xff1a;深入Laravel服务容器&#xff1a;构建灵活应用的秘诀 Laravel框架的服务容器是一个强大的工具&#xff0c;它负责管理类的依赖关系和执行依赖注入&#xff08;DI&#xff09;。服务容器是Laravel依赖注入系统的核心&#xff0c;使得应用组件之间的耦合度降低&…...

3.js - 模板渲染 - 金属切面效果

md&#xff0c;狗不学&#xff0c;我学 源码 // 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原件)

系统压力测试&#xff0c;简而言之&#xff0c;是在模拟高负载、高并发的环境下&#xff0c;对系统进行全面测试的过程。它旨在评估系统在面对极端使用条件时的性能表现&#xff0c;包括处理能力、响应时间、资源消耗及稳定性等关键指标。通过压力测试&#xff0c;开发团队能够…...

基于 PLC 的自动门控制系统设计与仿真程序探索

基于plc的自动门控制系统设计 仿真程序资料在自动化控制领域&#xff0c;基于 PLC&#xff08;可编程逻辑控制器&#xff09;的自动门控制系统应用广泛。今天咱就唠唠这基于 PLC 的自动门控制系统设计以及相关的仿真程序资料。 自动门控制系统设计需求 自动门要实现多种功能&a…...

Claude Code开源第一人,竟是华人辍学博士!CC之父回应:纯手误

51万行Claude Code代码全网裸奔&#xff0c;背后泄密第一人竟是他。就在刚刚&#xff0c;CC之父回应来了&#xff1a;是人&#xff0c;不是Bun。爆出Claude Code源码第一人&#xff0c;竟被全网扒出来了&#xff01;3月31日凌晨4点23分&#xff0c;安全研究员Chaofan Shou在X上…...

2026届必备的六大AI论文助手实测分析

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 此刻&#xff0c;针对学术写作情形的AI辅助网站已然构建起多元化生态&#xff0c;这类平台一…...

嵌入式开发中GNU C扩展特性解析与应用

1. 嵌入式开发中的C语言选择困境作为一名在嵌入式领域摸爬滚打多年的工程师&#xff0c;我深刻理解C语言在这个领域无可替代的地位。但很多刚入行的朋友可能不知道&#xff0c;我们日常使用的"Linux C"和教科书上的"标准C"其实存在不少差异。第一次看到GNU…...

JSP 语法详解

JSP 语法详解 引言 JSP(JavaServer Pages)是一种动态网页技术,它允许开发者在网页中嵌入Java代码,以实现与数据库的交互和动态内容生成。JSP语法简洁明了,易于学习和使用。本文将详细介绍JSP的语法结构,帮助读者更好地理解和应用JSP技术。 JSP基本语法 1. JSP页面结构…...

保姆级教程:手把手教你用VCSA 8.0.3接管Windows AD域,实现统一登录

企业级虚拟化身份管理&#xff1a;VCSA 8.0.3与Windows AD域深度集成实战 在数字化转型浪潮中&#xff0c;企业IT基础设施的集中化管理已成为刚需。当虚拟化平台规模扩大至数百台主机时&#xff0c;如何确保管理员和开发人员既能高效访问资源&#xff0c;又能遵循最小权限原则&…...

Win11Debloat:让Windows系统重获新生的一站式自动化优化方案

Win11Debloat&#xff1a;让Windows系统重获新生的一站式自动化优化方案 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter …...

SEO_为什么你的网站需要持续进行SEO优化?

SEO优化的重要性&#xff1a;为什么你的网站需要持续进行SEO优化 在当前竞争激烈的互联网市场中&#xff0c;网站的流量和用户参与度直接影响着企业的成功与否。为什么你的网站需要持续进行SEO优化呢&#xff1f;SEO&#xff08;搜索引擎优化&#xff09;不仅是提升网站在搜索…...

P3C代码规范检查:风险驱动架构下的动态治理策略

P3C代码规范检查&#xff1a;风险驱动架构下的动态治理策略 【免费下载链接】p3c Alibaba Java Coding Guidelines pmd implements and IDE plugin 项目地址: https://gitcode.com/gh_mirrors/p3/p3c 在数字化转型浪潮中&#xff0c;企业级Java应用面临代码质量与开发效…...

javaweb铁路火车接发车课程作业培训考试系统证书

目录同行可拿货,招校园代理 ,本人源头供货商铁路火车接发车课程作业培训考试系统证书的功能分析系统概述功能模块分析技术实现要点行业合规性扩展功能建议项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作同行可拿货,招校园代理 …...