C++程序设计——常见C++11新特性

news2024/11/15 2:04:37

一、列表初始化

1.C++98中{}的初始化问题

        在C++98中,允许使用花括号{}对数组元素进行统一的列表初始化值设定,比如:

        但是对于一些自定义类型,就无法使用这样的方式进行初始化了,比如:

就无法通过编译,导致每次定义vector时,都需要先把vector定义出来,然后使用循环对其赋初始值,非常不便。

        C++11扩大了用花括号括起的列表(初始化列表)的使用范围,使其可用于所有的内置类型和用户自定义的类型,使用初始化列表时,可以添加等号,也可以不添加,没有区别。

2.自定义类型的列表初始化

多个对象的列表初始化:

        多个对象想要支持列表初始化,需要给该类(模板类)添加一个带有initializer_list类型参数的构造函数。

注意:initializer_list是系统自定义的类模板,该类模板中主要有三个方法:begin()、end()迭代器,以及获取区间中元素个数的方法size()。

#include <initializer_list>
template<class T>
class Vector {
public:
	//支持多个对象列表初始化
	Vector(initializer_list<T> lt)
		: _capacity(lt.size())
		, _size(0)
	{
		_arr = new T[_capacity];
		for (auto e : lt) {
			_arr[_size++] = e;
		}
	}
	Vector<T>& operator=(initializer_list<T> lt) {
		delete[] _arr;
		_size = 0;
		for (auto e : lt) {
			_arr[_size++] = e;
		}
		return *this;
	}
private:
	T* _arr;
	size_t _capacity;
	size_t _size;
};

二、变量类型推导

1.为什么需要类型推导

        在定义变量时,必须先给出变量的实际类型,编译器才允许定义,但有些情况下可能不知道变量的实际类型,或类型写起来比较复杂。

        所有C++11中,可以使用auto根据变量初始化表达式类型来推导变量的实际类型,给程序的书写提供便利。

auto详细介绍

2.decltype类型推导

2.1为什么需要decltype

        auto使用的前提是:必须要对auto声明的类型进行初始化,否则编译器无法推导出auto的实际类型。但有些时候可能需要根据表达式运行完成后的结果类型进行推导,但是编译期间代码不会运行,此时auto也就无法完成推导了。

比如:

如果这样返回,结果就会出现问题,但如果能够使用加完之后的实际类型作为函数返回值类型,那么就不会出错了,但是这需要程序运行完后才能知道结果的实际类型。解决方法:

返回值类型追踪:

注意:auto并不能推导函数返回值类型,在这里只是起一个占位符作用。

2.2decltype的功能

decltype是根据表达式的实际类型推演出定义变量时所用的类型:

(1)推演表达式类型作为变量的定义类型;

(2)推演函数返回值类型;

(3)返回值类型追踪

注意:推演的过程中,并不会调用函数,都是在编译阶段完成的。

三、范围for循环

范围for详细介绍

四、final与override

final与override关键字介绍

五、智能指针

C++智能指针介绍与模拟实现

六、新增加容器

(1)静态数组array;

(2)循环单链表forward_list;

(3)unordered系列。

七、默认成员函数控制

1.显示缺省函数

        在C++11中,可以在默认成员函数定义或声明时,加上=default,从而显示的指示编译器生成该函数的默认版本。用=default修饰的函数称为显示缺省函数。

2.删除默认函数

如果想要限制某些默认函数的生成:

(1)C++98中:将该函数设置为private,并且只声明不定义。

(2)C++11中:只需要在该函数声明加上=delete即可,该语法指示编译器不生成对应函数的默认版本,用=delete修饰的函数称为删除函数。

八、右值引用

C++右值引用

九、lambda表达式

C++lambda表达式

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

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

相关文章

HIT-CSAPP实验二gdb和edb的配置

笔者只是根据自己的电脑进行环境的配置&#xff0c;不一定适配所有的电脑&#xff0c;也不是万能的方法&#xff0c;如果读者使用本人的方法没有配置成功本人深表抱歉。 gdb的使用 通过网上查阅一些资料获得 gdb查看内存和寄存器以及中断设置&#xff08;转&#xff09;_gdb…

关于安装PicGo后启动无界面问题

关于安装PicGo后启动无界面问题 其实我遇到的这个也不算是问题&#xff0c;也挺无语的。 最近为了搭建图床&#xff0c;需要使用PicGo&#xff0c;第一次搭建图床也是第一次使用PicGo。在安装了PicGo后发现启动不了&#xff0c;查看后台发现PicGo在运行着&#xff0c;但是没有界…

数据结构与算法九 树进阶

一 平衡树 之前我们学习过二叉查找树&#xff0c;发现它的查询效率比单纯的链表和数组的查询效率要高很多&#xff0c;大部分情况下&#xff0c;确实是这样的&#xff0c;但不幸的是&#xff0c;在最坏情况下&#xff0c;二叉查找树的性能还是很糟糕。 例如我们依次往二叉查找…

User Experience Design and Information Architecture

&#x1f4a5;(1) What is IA (Information Architecture)? Definition of four sentences I. Information Architecture is "The structure design of shared informaiton environments-共享信息环境的结构设计" II. Information Architecture is "The sy…

ChatGPT提示词工程(三):Summarizing概括总结

目录 一、说明二、安装环境三、概括总结&#xff08;Summarizing&#xff09;1. 简单地概括总结&#xff0c;只有字数限制2. 概括总结需要关注的某些点 四、用“提取”代替“总结”&#xff08;Try "extract" instead of "summarize"&#xff09;五、概括总…

Mysql第二章 多表查询的操作

这里写自定义目录标题 一 外连接与内连接的概念sql99语法实现 默认是内连接sql99语法实现左外连接&#xff0c;把没有部门的员工也查出来sql99语法实现右外连接&#xff0c;把没有人的部门查出来sql99语法实现满外连接&#xff0c;mysql不支持这样写mysql中如果要实现满外连接的…

生成对抗网络原理

GAN的原理 GAN是在2014年由Ian Goodfellow等人提出的&#xff0c;发表在论文“Generative Adversarial Networks”中。 GAN的主要灵感来源于博弈论中零和博弈的思想&#xff0c;应用到深度学习神经网络上来说&#xff0c;就是通过生成网络G&#xff08;Generator&#xff09;和…

系统架构设计

高性能 客户端内部缓存客户端到服务器之间缓存&#xff1a;CDN,网络专线数据库前加缓存Sessioin等信息共享NoSQL数据库分片&#xff0c;读写分离web层无关态集群负载均衡GeoDNS 就近原则&#xff0c;边缘计算存储异步&#xff0c;解耦&#xff0c;削峰&#xff1a;消息队列离线…

MySQL学习笔记第五天

第06章多表查询 多表查询概述&#xff1a; 多表查询&#xff0c;也称为关联查询&#xff0c;指两个或更多个表一起完成查询操作。前提条件&#xff1a;这些一起查询的表之间是有关系的&#xff08;一对一、一对多&#xff09;&#xff0c;它们之间一定是有关联字段&#xff0…

第二十章 渲染管线

渲染管线是计算机图形中最基础最核心的部分&#xff0c;它是将3D场景显示到2D平面的技术过程。在DirectX课程中&#xff0c;我们就介绍了渲染管线&#xff0c;分为固定渲染管线和可编程渲染管线&#xff08;Shader&#xff09;。但是在DirectX 10版本之后统一了渲染架构&#x…

【Java】面试常问知识点(Java基础)

JVM java 栈&#xff1a;线程私有&#xff0c;生命周期和线程&#xff0c;每个方法在执行的同时都会创建一个 栈帧用于存储局部变量表&#xff0c;操作数栈&#xff0c;动态链接&#xff0c;方法出口等信息。方法的执行就对应着栈帧在虚拟机栈中入栈和出栈的过程&#xff1b;栈…

Photoshop如何使用蒙版之实例演示?

文章目录 0.引言1.给单调的天空添加蓝天白云2.清除头发边缘的杂色3.制作景深效果4.制作枯荣共存的树5.制作双重曝光肖像 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对PS进行了学习&#xff0c;本文通过《Photoshop2021入门教程》及其配套素材结合网上相关资料进行…

【Linux内核解析-linux-5.14.10-内核源码注释】内核启动kernel_init解释

源码 解释1 static int __ref kernel_init(void *unused): 声明一个静态整型函数kernel_init()&#xff0c;该函数不会被其他文件访问&#xff0c;使用__ref标记表示该函数是可重定位的&#xff0c;并且该函数不需要任何参数。 wait_for_completion(&kthreadd_done);: 等待…

FL Studio 2023中文高级版水果编曲软件下载

FL Studio 2023中文版是一款非常经典的音乐制作软件&#xff0c;这款软件除了可以为用户提供全面的音乐制作功能之外&#xff0c;还有丰富的主题和皮肤供用户选择&#xff0c;让用户不但做出的音乐具有自己的风格&#xff0c;连制作的音乐的过程也个性十足&#xff0c;非常适合…

荔枝派Zero(全志V3S)驱动开发之串口

系列文章目录 文章目录 系列文章目录前言一、修改及编译设备树1、修改设备树文件2、编译 kernel 二、移植 minicom1、配置buildroot2、编译 buildroot 三、拷贝到 SD 卡四、测试验证1、确认 minicom 是否正常2、确认串口3、发送测试4、接收测试 前言 修改设备树打开 uart1 和 …

14-4-进程间通信-共享内存

之前学习了无名管道&#xff0c;命名管道&#xff0c;消息队列。 还剩下&#xff1a;共享内存&#xff0c;信号&#xff0c;信号量。 本章讨论的是共享内存。 一、共享内存的应用场景 A进程有自己的存储空间&#xff1b; B进程也有自己的存储空间&#xff1b; A进程和B进…

使用物联网技术进行肥胖管理是可行的吗?

在物联网和可穿戴设备的帮助下&#xff0c;个人现在可以监测自己的健康指标&#xff0c;如心率、血糖水平和身体活动。这些个性化的见解帮助人们对自己的生活方式做出明智的决定&#xff0c;从而带来更好的体重管理结果。 利用物联网技术成功管理肥胖症 肥胖是一个全球性的健…

还在挣扎文件

由于在老式打印机里面每打下一行都要进行回车和换行&#xff0c;在windows系统里面也延续了这个惯例&#xff0c;但是c语言是只有换行&#xff0c;但是为了兼容&#xff0c;会自动进行转换&#xff1b;比如&#xff0c;它在写入文件的时候换行会自动转换为回车加换行&#xff0…

加强网络风险生命周期

当今业务环境中云原生应用程序的激增帮助组织简化了运营。 企业现在可以近乎实时地监控数据、与客户互动并分享见解&#xff0c;帮助他们克服曾经阻碍生产力的低效率问题。 然而&#xff0c;使用云也极大地扩展了企业可利用的攻击面。 CSPM、CWPP、CNAPP、SAST、SCA、IaC、D…

网络基础3【网络层、数据链路层】

目录 一.网络层 1.IP协议 &#xff08;1&#xff09;基本概念 &#xff08;2&#xff09;协议头格式 2.网段划分 3.特殊的IP地址 4.IP地址的数量限制 5.私有IP地址和公网IP地址 6.路由 二.数据链路层 1.以太网 2.以太网帧格式 3.MAC地址 4.对比MAC地址和IP地址 …