c++11特性(2)

news2024/11/23 20:48:01

目录

1.新增了两个默认成员函数

2.新增了几个关键字

3.可变参数模板


1.新增了两个默认成员函数

a.移动构造函数

b.移动赋值运算符重载

默认生成的前提条件:没有实现析构函数,拷贝构造,拷贝赋值重载中的任意一个。

为什么要实现移动的版本可以参考:重点在其中提到的右值引用的作用​​​​​​,总的来说就是如果你传入的是将亡值的前提下要进行深拷贝。移动可以减少空间消耗,提高效率。

c.和构造和析构一样,对一个类中的内置类型直接进行按字节的值拷贝。对于自定义类型,就会去调用它自己的移动构造,移动拷贝。


2.新增了几个关键字

final override default delete。

final:表示以后无法进行重写

class A
{
	int a;
public:
	virtual void Show() final
	{
		cout << "i am a" << endl;
	}
};
class B:public A
{
	int b;
public:
	virtual void Show()
	{
		cout << "i am b" << endl;
	}
};

 override:检查是否重写

class A
{
	int a;
public:
	virtual void Show()
	{
		cout << "i am a" << endl;
	}
};
class B:public A
{
	int b;
public:
	virtual void Show() override //如果这个函数不是重写与A的会报错
	{
		cout << "i am b" << endl;
	}
};

default,delete用的不多,了解一下,default:强制该函数生成,delete:强制不让该函数生成。

有一个经典题目,问你如何将一个类的对象只创建在堆上?

答案是:将该类的析构函数后加上delete,那么就只能用new创建对象。最后再显示调用一个类似析构的函数,记得在该函数中将壳子(this)也删干净。


3.可变参数模板

template <class T>
void PrintArg(T t)
{
 cout << t << " ";
}
//展开函数
template <class ...Args>
void ShowList(Args... args)
{
 int arr[] = { (PrintArg(args), 0)... }; //通过逗号表达式和数组初始化来查看参数
 cout << endl;
}
int main()
{
 ShowList(1, 'A', std::string("sort"));
 return 0;
}

是不是感觉人晕了,这啥啊?放心,我们多半是不会写这种代码的,不过stl库里面实现了一些接口用到了可变参数模板。

拿vector来说,emplace_back就是区别于push_back的另一种方法。

int main()
{
	//方便描述,这种情况称为情况1
	vector<int> v1;
	v1.push_back(10);
	v1.emplace_back(20);
	for (auto e : v1)
		cout << e << " ";

	cout << endl;
	
	//这种情况称为情况2
	vector<pair<int, int>> v2;
	v2.push_back(make_pair(10,1));
	v2.emplace_back(20,2);
	for (auto e : v2)
		cout << e.first << " ";

	cout << endl;
	return 0;
}

情况1中,emplace_back与push_back基本效率一致。

情况2中,由于类型是pair类型,使用可变参数模板可以减少拷贝次数。


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三菱PLC单轴运动控制

1、什么是运动控制 ​ 运动控制&#xff0c;也可叫做电力拖动控制&#xff1b;它是自动化的一个分支&#xff0c;其动力源大部分都基于电动机。 也就是说&#xff0c;运动控制其实是基于电动机&#xff0c;实现物体对于角位移、速度、转矩等物理量改变的控制。 这里面&#xf…

Linux开发工具(2)——vim

文章目录多模式编辑器——vimvim的基本操作命令模式&#xff08;Normal mode&#xff09;插入模式&#xff08;Insert mode&#xff09;底行模式&#xff08;Last line mode&#xff09;vim的基本配置原理配置sudoers文件多模式编辑器——vim vim是一种多模式编辑器&#xff0c…

MYSQL语法一:创建表和查看表的所有列和所有数据库等

前言&#xff1a;接下里&#xff0c;我们即将开启mysql的旅行之路。首先是它的基础知识 1.mysql的基本知识点 mysql是客户端加服务器的模式。 客户端给服务器发送的数据称为请求request 服务器给客户端返回的数据称为响应response 客户端和服务器可以在不同主机上&#xff0c;…

轻松学习jQuery事件和动画

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;前端开发者…

计算机网络-网络层详细讲解(持续更新中)

网络层概述 网络层的主要任务是实现网络互连&#xff0c;进而实现数据包在各网络之间的传输。 要实现网络层主要任务&#xff0c;需要解决以下主要问题&#xff1a; 网络层向运输层提供怎样的服务&#xff08;“可靠传输”还是“不可靠传输‘&#xff09;网络层寻址问题路由…

小啊呜产品读书笔记001:《邱岳的产品手记-04》第07+08讲 关于需求变更

小啊呜产品读书笔记001&#xff1a;《邱岳的产品手记-04》第0708讲 关于需求变更一、今日阅读计划二、泛读&知识摘录1、07讲 关于需求变更&#xff08;上&#xff09;&#xff1a;需求背后的需求2、08讲 关于需求变更&#xff08;下&#xff09;&#xff1a;化变更于无形三…

【Pytorch with fastai】第 14 章 :ResNet

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

自动化测试selenium在小公司的成功实践

前言 可能提到自动化测试selenium&#xff0c;大家都会想到用python语言来编写脚本。但我们选择了java语言&#xff0c;因为我相信大部分公司java程序员比python程序员多得多。而对于很多测试人员&#xff0c;并不能熟练使用编程语言&#xff0c;所以他们需要别人指导。与其使…

iOS 16.2 的7个惊人变化

看起来 iOS 16 正在不断扩展 你已经知道 iOS 16 和 iOS 16.1 有多么不可思议。所以我认为下一次更新已经没有多少了——iOS 16.2。 Apple 刚刚通过 iOS 16.2 Developer Beta 1 消除了这些信念。 Developer Beta 2 中还有 7 个变化。相信我,它们也很棒。 #1、锁定屏幕的药物…

qemu创建linux虚拟机(亲测有效,virt-manger方式)

1&#xff0c;网桥的搭建 Bridge方式原理 Bridge方式即虚拟网桥的网络连接方式&#xff0c;是客户机和子网里面的机器能够互相通信。可以使虚拟机成为网络中具有独立IP的主机。 桥接网络&#xff08;也叫物理设备共享&#xff09;被用作把一个物理设备复制到一台虚拟机。网桥多…

Chrome 扩展教程之如何使用 React 构建 Chrome 扩展(教程含源码)

创建自己的 Chrome 扩展程序比许多人想象的要容易。这很有趣。我们可以尽情发挥我们的创造力,根据需要修改每个网站。 在本文中,我将首先向您展示如何设置 Chrome 扩展程序。之后,我们将设置一个 React 应用程序并将其加载到任何网站上。 设置 在我们开始之前,让我们在我…

对称加密和非对称加密

对称加密 加密和解密时使用的是同一个秘钥&#xff0c;这种加密方法称为对称加密&#xff0c;也称为单密钥加密。 优点&#xff1a;算法公开、计算量小、加密速度快、加密效率高。 缺点&#xff1a;如果一方的秘钥被泄露&#xff0c;那么加密信息也就不安全了。 示例AES pri…

VMware Workstation中桥接模式、NAT模式、仅主机模式

一、VMware虚拟机的网络模式 VMware工作站虚拟机有三种网络模式【①桥接模式 ②NAT模式 ③仅主机模式】&#xff0c;如下图所示&#xff1a; 二、VMware虚拟机的网络模式介绍 2.0、VMware的虚拟设备 VMware的虚拟设备序号虚拟设备编号说明1VMnet0是虚拟桥接网络下的虚拟交换机…

【正点原子FPGA连载】 第二章 实验平台简介 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第二章 实验平台…

CNN (吴恩达 2021

week1-2 02_边缘检测例子_哔哩哔哩_bilibili ​ ​ 我们之前在说面部识别介绍过&#xff0c;要识别面部&#xff0c;都是从细微的边缘入手&#xff0c;一层一层聚类&#xff0c;最终实现人脸的识别。神经网络由浅层到深层&#xff0c;分别可以检测出图片的边缘特征 、局部特…

【Linux】基本指令(一)

文章目录前言操作系统简述学习指令的原因ls 指令pwd 指令cd 指令touch 指令tree 命令mkdir 指令rmdir 和 rm 指令nano 指令clear 指令whoami 指令常用键位结语前言 今天&#xff0c;我们开始 Linux 的学习。本篇博客内容为 操作系统简述、Linux 基本指令、和几个 Linux 常用键…

Wordpress 生手遇到一堆问题,反应巨慢,提速插件又是一堆错误

环境 LAMP&#xff1a;Debian&#xff0c;Apache&#xff0c;MariaDB&#xff0c;PHP 7.4 Wordpress安装几乎没有什么要求&#xff0c;几乎没有特别的设置就可以顺利安装成功&#xff0c;但随着插件的增加&#xff0c;问题就慢慢出来了。 写两页就会发现Wordpress反应巨慢&…

LiteFlow 开源编排规则引擎

osgi 让 java 系统变成模块化的形式&#xff0c;ASM 是一款修改字节码的框架&#xff0c;同类型的框架 Cglib。这些框架能加载一个 class 信息&#xff0c;Javaagent&Attach API 结合 ASM LiteFlow 的理念很简单&#xff0c;就是把系统中的各个逻辑切分成一小块一小块的&am…

XCIE-HUAWEI-PBR-MQC-引入形成的路由环路

XCIE-HUAWEI-PBR-MQC-引入形成的路由环路 首先来个测试 给你们选&#xff0c;答案选啥呢? 正确答案在结尾公布 正确答案是C 为什么呢&#xff1f; 首先&#xff0c;虽然ACL有一个齐总是拒绝的&#xff0c;但是呢&#xff0c;他两都是同一条路由 但是呢&#xff01;&#x…

用于高通量实验筛选的化合物库 | MedChemExpress

Protein-Protein Interaction Library (含 59,370 种化合物) 用于发现新的 PPI 抑制剂 蛋白质相互作用 (PPI)是研究生物反应机制的重要工具。PPI 能产生许多效应&#xff0c;如改变蛋白质对其作用底物的专一性、生成新的结合位点、形成特异底物作用通道等。针对PPI的药物设计为…