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

侯捷C++ 2.0 新特性

关键字

nullptr and std::nullptr_t

auto

一致性初始化:Uniform Initialization

11之前,初始化方法包括:小括号、大括号、赋值号,这让人困惑。基于这个原因,给他来个统一,即,任何初始化都能够使用大括号来实现。实现的方法使用另外一个新特性:初始化列表。下一个特性介绍。

// 11之前
Rect r1 = {3, 7, 30};
Rect r2(3, 7, 20);
int ia[6] = {27, 89, 20};// 11之后
int values[] {1, 2, 3};
vector<int> v {1, 2, 3};
complex<double> c {4.0, 3.0};

初始化列表:Initializer Lists

ERROR:narrowing    不允许窄化的转换 

前面的一致性初始化中的大括号会形成一个初始化列表。具体实现代码如下:

explicit

struct complex{int real, imag;// explicitcomplex(int re, int im = 0) : real(re), imag(im){}complex operator+(const complex& x){return complex((real + x.real), (imag + x.imag));}
}

11之前,用于一个参数的构造函数。有上面的代码,那么在执行complex c1(12, 5); complex c2 = c1 + 5;的时候,构造函数不用explicit修饰,则会把5变成一个复数类,但是如果用explicit修饰了,这两句代码就会报错。也就是,让编译器知道,用户希望只在显式调用构造函数的时候才会调用,其他时候不允许调用。

11之后,explicit可用在接受一个以上参数的构造函数。突破了一个参数的限制,阻止任意多个参数的构造函数的隐式调用。

class p {public:p(int a, int b){cout << "p(int a, int b)" << endl;}explicit p(int a, int b, int c){cout << "expilict p(int a, int b, int c)" << endl;}
}p p1(1, 2); //p(int a, int b)
p p2 = {1, 2, 3}; // 报错,因为initializer想要去调用用explicit修饰的构造函数,被编译器阻止

=default, =delete


如果自行定义了一个构造函数,那么编译器就不会给你一个默认的构造函数;

如果你强行加一个 =default,就可以重新获得并使用编译器给出的默认构造函数。

=default只可以用于构造函数,=delete可用于任何函数,给编译器说明禁止使用这个函数。

模板别名:Alias Template

别以为它只是让一个类换个名字,方便书写,它后面会引发一个大事情。

比如下面这个例子:

template <typename T>
using Vec = std::vector<T, MyAlloc<T>>;Vec<int> coll; 
is equivalent to
std::vector<int,MyAlloc<int>> coll;

那我们可以用#define或是typedef来达到同样的效果吗?

#define Vec<T> template<typename T> std::vector<T, MyAlloc<T>>;
Vec<int> coll; //------> template<typename int> std::vector<int, MyAlloc<int>>; //这不是我们想要的//如果使用typedef,因为typedef是不能够接受参数的,最多写成下面这样
typedef std::vector<int, MyAlloc<int>> Vec;

所以,using的优势就是能够指定参数。

那这样做,只是为了减少代码量吗?如果有一个场景,需要以一个类型作为参数,而不是以一个类的对象作为参数呢?比如说下面这种情况:

Container是一种类型,所以上面的语句就会报错,找不到Container定义。有一种解决方案是牺牲方法的通用性,将Container和T进行组合变成一个参数传入,这种实现方法也不赖。那有没有更优雅的实现方案呢?程序员嘛,都是讲究优雅的!

所以要进行下面的思考:有没有模板语法,能够在一个模板类中接受一个模板参数,在模板类中取出这个模板参数呢?有!模板模板参数!

模板模板参数

template<typename T, template<class> class Container>
class XCIs{
private:Container<T> c;
public:XCIs(){for(long i = 0; i < size; ++i)c.insert(c.end(), T());...(上图中的实现)}
}

上述就是模板模板参数的使用。在引入模板模板参数之后,就可以这么使用:XCIs<Mystring, vector> c1;完成我们的任务。但是!这一句又会报错,因为vector模板容器需要两个模板参数(类型和分配器)!这,不就需要using了吗? 

类型别名:Type Alias

类似于typedef,不过是借助using来实现:

typedef void(*func)(int, int); // 函数指针||v
using func = void(*)(int, int);

和typedef的唯一区别是using多了一个模板别名(带参数)的功能。

using的所有用法

  1. using namespace std; //打开一个命名空间
    using std::count; //打开一个命名空间的一个组件
  2. using Base::_M_Prime; //打开一个类的一个成员
  3. 模板别名、类型别名

noexcept

保证一个函数不会抛出异常:

void foo() noexcept;
void foo() noexcept(predicate); // 在条件predicate为真时,不抛出异常

异常一定要被处理,如果一个函数声明为noexcept就会把异常交给上一层调用。

你最好是告诉C++(特别是vector):你的移动构造函数和移动赋值构造函数是noexcept的。因为vector要增长空间,增长空间有构造函数调用过程,如果不显示声明移动构造时noexcept的,编译器不敢调用!

final

修饰类,表示被修饰的类不能够继承;
修饰虚函数,表示虚函数不能被重写。

decltype

主要是为泛型编程而设计,以解决泛型编程中,由于有些类型由模板参数决定,而难以(甚至不可能)表示之的问题。有点类似typeof。

参考文章:侯捷C++八部曲笔记(四、C++2.0新特性)_2.0/3+1c++-CSDN博客

相关文章:

侯捷C++ 2.0 新特性

关键字 nullptr and std::nullptr_t auto 一致性初始化&#xff1a;Uniform Initialization 11之前&#xff0c;初始化方法包括&#xff1a;小括号、大括号、赋值号&#xff0c;这让人困惑。基于这个原因&#xff0c;给他来个统一&#xff0c;即&#xff0c;任何初始化都能够…...

计算机网络——基础知识汇总(八)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…...

DIA数皆智能客户体验管理CEM获伊利“健康+AI”生态创新大奖

DIA数皆智能客户体验管理CEM获伊利“健康AI”生态创新大奖 数皆智能再获殊荣&#xff01; 北京&#xff0c;2023年12月26日 — 在全球瞩目的伊利集团“健康AI”生态创新大赛中&#xff0c;上海数皆智能技术有限公司大放异彩&#xff0c;其创新领先的“智能化客户体验管理CEM&a…...

linux 休眠唤醒中设备、总线、用户进程、内核线程调试分析流程

一、suspending consoles打印 代码位置&#xff1a;Kernel/power/suspend.c 函数调用流程&#xff1a;devices_and_enter(suspend_state_t state) --> suspend_console(); void suspend_console(void) { if (!console_suspend_enabled) 注释这一行&#xff0c;可以看到…...

k8s陈述式资源管理(命令行)

1、资源管理 &#xff08;1&#xff09;陈述式资源管理&#xff08;常用——查、增&#xff09; 使用kubectl工具进行命令行管理 ①特点&#xff1a;对资源的增删查比较方便&#xff0c;对改不友好 ②优点&#xff1a;90%以上的场景都可以满足 ③缺点&#xff1a;命令冗长…...

五、HTML 标题

在 HTML 文档中&#xff0c;标题很重要。 一、HTML 标题 标题&#xff08;Heading&#xff09;是通过 <h1> - <h6> 标签进行定义的。<h1> 定义最大的标题。 <h6> 定义最小的标题。 <h1>这是一个标题。</h1> <h2>这是一个标题。&l…...

三菱MR-JE伺服脉冲轴应用参数设置

三菱MR-JE伺服在脉冲轴控制上的应用&#xff0c;常用参数设置如下&#xff1a; 1、常用参数 未完......

通信原理课设(gec6818) 006:网络编程

目录 1、概念 2、通信 3、通信基本流程 TCP: UDP: 4、函数 I 创建套接字 II 绑定地址 III 字节序转换 IV 地址转换 V 监听 VI accept VII connect VIII 从套接字接收信息 IX 从套接字发送消息 X 关闭套接字 5、网络配置 1、确保你的网卡里面有两个虚拟网卡&a…...

一体化、一站式!智能视频客服加码全媒体云呼叫中心能力

凭借对电话、短信、邮件、社交媒体、视频等数种沟通渠道强大的统一集成能力&#xff0c;全媒体云呼叫中心已跃升成为现代企业客户服务的核心工具&#xff0c;高效便捷地为企业提供客户服务。而随着消费者需求愈加多元化和个性化&#xff0c;传统的语音通话方式已无法满足部分消…...

Vue的watch功能:实现响应式数据更新

watch是vue内部提供的一个用于侦听功能的更通用的方法&#xff0c;其用来响应数据的变化&#xff0c;通过特定的数据变化驱动一些操作。简言之&#xff1a;当需要被watch监听的数据发生变化时就会被执行watch中的逻辑。实现数据的实时更新&#xff01; 普通监听 <template…...

兔单抗制备方法的发展-杂交瘤技术|卡梅德生物

兔单克隆抗体技术是近年来在抗体研究领域中取得的重要进展之一。研究人员通过改进抗原设计、免疫策略和单克隆B细胞培养条件&#xff0c;提高了单克隆抗体的产量和特异性。相比于传统的小鼠单克隆抗体技术&#xff0c;兔单克隆抗体技术具有更大的抗原特异性和更高的亲和力&…...

【数据结构】图论与并查集

一、并查集 1.原理 简单的讲并查集&#xff0c;就是查询两个个元素&#xff0c;是否在一个集合当中&#xff0c;这里的集合用树的形式进行表示。并查集的本质就是森林, 即多棵树。 我们再来简单的举个例子: 假设此时的你是大一新生&#xff0c;刚进入大学&#xff0c;肯定是…...

冲刺港股IPO,速腾聚创「承压」

对于「光鲜」的激光雷达公司来说&#xff0c;当下最难的问题是&#xff1a;如何说服投资者相信&#xff0c;前装市场能够按照预期定点订单兑现。 今年&#xff0c;作为国内高阶智驾头部车企之一的华为&#xff0c;在陆续推出的新车型上开始「降本」。其中&#xff0c;问界智驾版…...

Linux基础知识点(五-信号)

一、信号的基本概念 1.1 信号的概念 信号&#xff08;signal&#xff09;&#xff0c;又称为软中断信号&#xff0c;用于通知进程发生了异步事件&#xff0c;它是Linux系统响应某些条件而产生的一个事件&#xff0c;它是在软件层次上对中断机制的一种模拟&#xff0c;是一种异…...

SpringBoot 一个注解实现数据脱敏

什么是数据脱敏 数据脱敏是指对某些敏感信息&#xff0c;例如姓名、身份证号码、手机号、固定电话、银行卡号、邮箱等个人信息&#xff0c;通过脱敏算法进行数据变形&#xff0c;以保护敏感隐私数据。 数据脱敏通常涉及以下几种主要方法&#xff1a; 替换&#xff1a; 将原始…...

记录:开始学习网络安全

本文持续更新学习进度 背景 在私企干了5年虚拟化、云原生相关的运维&#xff0c;学到了很多&#xff0c;但不成体系。老板是清华毕业法国留学在德勤干过&#xff0c;最后回国创业的野路子。我工作是为了更好的生活&#xff0c;我挺担心老板因为家庭变故或者炒个原油宝&#x…...

C语言—第1次作业:编译与连接基础知识

常做练习巩固知识 本次作业答案链接如下&#xff1a; 答案解析——C语言—第1次作业&#xff1a;编译与连接基础知识 1.字符串的结束标志是&#xff1a;&#xff08; &#xff09; A.是0 B.是EOF C. 是\0 D.是空格 2.关于C语言关键字说法正确的是&#xff1a;( ) A.关…...

not attached to window manager问题解决

关于出现这个问题&#xff0c;一般是因为Activity已经在finish了&#xff0c;但是还在dialog.show()&#xff0c;或者dialog.dismiss().导致window manager无法管理dialog。解决办法如下&#xff1a; /** * 20210913 安全关闭对话框 . * 避免报&#xff1a;not attac…...

影视后期: PR调色处理,调色工具面板介绍

写在前面 整理一些影视后期的相关笔记博文为 Pr 调色处理&#xff0c;涉及调色工具面板简单认知包括 lumetri 颜色和范围面板理解不足小伙伴帮忙指正 元旦快乐哦 _ 名词解释 饱和度 是指色彩的鲜艳程度&#xff0c;也被称为色彩的纯度。具体来说&#xff0c;它表示色相中灰色…...

ARM AArch64的虚拟化(virtualization)详解(上)

目录 一、概述 开始之前 二、虚拟化介绍 为什么虚拟化很重要...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...