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原件)
系统压力测试,简而言之,是在模拟高负载、高并发的环境下,对系统进行全面测试的过程。它旨在评估系统在面对极端使用条件时的性能表现,包括处理能力、响应时间、资源消耗及稳定性等关键指标。通过压力测试,开发团队能够…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
