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

C++11 部分新特性

1. 关键字和语法

1.1 nullptr

空指针,能够和整数0进行区别,因为#define NULL 0


1.2 类中非静态成员变量定义时初始化 & 初始化列表


1.3 auto

可推导出右值类型,从而得知左边变量类型。

简单使用示例:

auto func() {return 3.33;
}struct Test {int a;double c;
};void test() {auto a = 1;auto b = func();cout << b << endl;Test t1 = { 2,2.111 };auto t2 = t1;cout << typeid(t2).name() << endl;  // struct Test}

 注意:

(a)auto定义变量必须初始化,如下用法错误;

auto a;
a = 10;

 (b)auto不能定义自定义类型的成员变量,如下用法错误;

struct Test {int a;auto b = 10;
}

(c)auto不能定义数组,如下用法错误; 

auto b[3] = { 1,2,3 };

(d) auto不能作为模板实例化类型,如下用法错误; 

vector<auto> v = { 1, 2, 3 };

1.4 decltype

获取变量的类型。

简单使用示例:

auto c = 3.3;
decltype(c) d = 9.9;
cout << typeid(d).name() << endl;  // double
cout << d << endl; // 9.9/*获取枚举类型*/
enum { OK, ERROR } flag;
decltype(flag) flag2;

类型追踪:

结合模板和auto使用。

template<typename T1, typename T2>
auto add(const T1&& a, const T2&& b)->decltype(a + b) {  // 推导出(a+b)类型return a + b;
}void test01() {auto ret1 = add(1, 1.01);cout << typeid(ret1).name() << endl; // doubleauto ret2 = add(1, 2);cout << typeid(ret2).name() << endl; // int
}

1.5 基于范围的for循环

可遍历数组、容器等,底层为指针或迭代器实现。

for(Type val : container) {cout << val << endl;
}

注意:

范围需确定,否则无法使用,如下用法错误:

void func(int a[]) {for(int& tmp:a) {cout << tmp << endl;}
}

1.6 静态断言

断言:运行时检查条件,为真则继续执行,否则终止程序,提示错误。如下:

#include<cassert>void test04() {bool flag = false;assert(flag == true);cout << "Hello!" << endl; // 不执行
}

运行结果:

 静态断言:编译时检查条件。

用法:

static_assert(常量表达式条件, "提示字符串");

例如:

void test05() {static_assert(sizeof(void*) == 4, "64位!"); // 静态断言失败cout << "Hello" << endl;
}

1.7 noexcept修饰符

声明一个函数不会抛出异常,帮助编译器优化代码,使用方式如下:

void test06() noexcept {...
}

1.8  模板的默认参数

如下:

/*普通函数  一默到底*/
void test07(int a, int b = 3, int c = 5) {}/*类模板  一默到底*/
template<typename T1, typename T2 = double>
class A {};/*类模板  无限制*/
template<typename T1 = int, typename T2, typename T3>
auto test08(T1 a, T2 b, T3 c)->decltype(a + b + c) {return a + b + c;
}

1.9 可变参模板

typename... A

(1)可变参模板函数递归方式展开参数包

void debug() { // 递归终止函数示例cout << "调用结束.\n" << endl;
}template<typename T1, typename...T2>
void debug(T1 first, T2...args) {cout << first << endl;// 递归调用debug(args...);
}void test07() {debug(1, "ABC", 3.14159);
}

 运行结果:

(2)可变参模板非递归方式展开参数包

template<typename T>
void print(T tmp) {cout << tmp << endl;
}template<typename...T>
void expand(T...args) {// 逗号运算符// 初始化列表int a[] = { (print(args),0)... };
}void test08() {expand(1, 2, 3, 4);
}

运行结果:

 

(3)模板类继承方式展开参数包

待补充.


1.10 右值引用

省去内存开辟、拷贝构造等。包括move移动语义函数、forward类型完美转发。

 


2. 绑定器和函数对象

bind、function、Lambda表达式


3. 智能指针

shared_ptr、weak_ptr


4. 容器

set、map:红黑树,数据有序,O(logn);

unordered_set、unordered_map:哈希表,不要求数据有序,O(1);

array:不可扩容数组;

forward_list:前向链表;list:双向链表。


5. 语言级别的线程库

使得多线程程序可更好地跨平台。

thread、mutex、condition_variable

lock_guard、unique_lock

atomic原子类型

sleep_for

底层封装的仍是Windows、Linux的线程API,例如Linux下可使用strace ./a.out跟踪程序的调用。

相关文章:

C++11 部分新特性

1. 关键字和语法 1.1 nullptr 空指针&#xff0c;能够和整数0进行区别&#xff0c;因为#define NULL 0 1.2 类中非静态成员变量定义时初始化 & 初始化列表 1.3 auto 可推导出右值类型&#xff0c;从而得知左边变量类型。 简单使用示例&#xff1a; auto func() {retur…...

selenium通过performance log获取状态码,Conten-Type,以及重定向路径

selenium的官方不提供获取状态码&#xff0c;Conten-Type&#xff0c;以及重定向路径的方法&#xff0c;并且官方说这些功能将来也不会有。java - How to get HTTP Response Code using Selenium WebDriver - Stack Overflow 非官方的方法大概有下面几种 1.通过requests重新请…...

GL绘制自定义线条3_自定义线帽

安卓Path搭配Paint可以设置线帽&#xff0c;我想能不能把我自己的线条绘制Demo也加上类似的功能。 线头规则描述&#xff1a; 1、设一个线宽一半的线段&#xff0c;坐标为(0, 0)到(-lineWidth / 2, 0)。 2、设步骤1的线段有一垂直于它的向量(0&#xff0c;1)&#xff0c;然后传…...

【AGC】新版鸿蒙崩溃SDK集成使用方法

【背景】 我们知道AGC的Crash SDK都是需要强制集成华为分析SDK的&#xff0c;在使用时的崩溃数据上报都要依靠分析服务来完成&#xff0c;这就容易受到限制&#xff0c;有时出现无数据的情况就要依次排查崩溃SDK与分析SDK&#xff0c;比较麻烦。而就在不久前&#xff0c;鸿蒙崩…...

vue-7:组件库(移动端vant)(PC端element)

移动端vant 插件安装&#xff08;按需导入&#xff09; 重启生效 # 通过 npm 安装 npm i unplugin-vue-components -D# 通过 yarn 安装 yarn add unplugin-vue-components -D 导入基于 vite 的项目&#xff1a; 如果是基于 vite 的项目&#xff0c;在 vite.config.js 文件中…...

JavaScript中splice()、slice()、split()三种方法的区别,及使用详细

简介&#xff1a;splice、slice、split是JavaScript中&#xff0c;比较常用的三个数组方法&#xff0c;表面看起来有点相像&#xff0c;用处却大不相同&#xff0c;今天就来分别介绍下它们的用法。 1、splice()方法 splice方法可以用来删除数组中的元素&#xff0c;或者向数组…...

Linux更新操作系统Openssh版本9.3p1(源码编译安装)

Linux更新操作系统Openssh版本9.3p1(源码编译安装) 部署前准备 安装依赖 yum install -y gcc gcc-c glibc make autoconf openssl openssl-devel pcre-devel pam-develyum install -y pam* zlib* openssh-9.3p1.tar.gzopenssl-3.1.0.tar.gz备份文件 cp /etc/pam.d/sshd /etc/…...

MS COCO数据集介绍

MS COCO数据集介绍 MS COCO全称是Microsoft Common Objects in Context&#xff0c;是由微软开发维护的大型图像数据集&#xff0c;包括不同检测任务&#xff1a; Object Detection&#xff08;[主要处理人、车、大象等]&#xff09; DensePose&#xff08;姿态密度检测&…...

Java之线程池

目录 一.上节复习 1.阻塞队列 二.线程池 1.什么是线程池 2.为什么要使用线程池 3.JDK中的线程池 三.工厂模式 1.工厂模式的目的 四.使用线程池 1.submit()方法 2.模拟两个阶段任务的执行 五.自定义一个线程池 六.JDK提供线程池的详解 1.如何自定义一个线程池? 2.创…...

让你的网站变得更智能 - B2 Pro主题问答模块新增OpenAI ChatGPT机器人自动回答功能

作为一个网站管理员,你一定会希望能够给你的用户提供更多、更好的服务。那么,你是否曾经想过为你的B2 Pro主题问答模块新增一个智能机器人自动回答功能呢?相信你一定想要这个功能,因为它能够大大提升你网站的用户体验。 现在,我们为你提供了一个好消息。我们已经为B2 Pro…...

仓库信息管理系统设计与实现

一、数据库设计 1.数据库模型设计概览 2.数据库表设计 ①depository 描述&#xff1a; 该表存储仓库的信息&#xff0c;比如仓库名称&#xff0c;仓库地址和仓库介绍 表结构&#xff1a; 序号 字段名 数据类型 主键 非空 默认值 描述 1 id INT(10) 是 是 2…...

初识Java多线程编程

文章目录 一、线程的状态二、线程的常见属性三、多线程编程Thread类常用构造方法1.继承Thread类2.实现Runnable接口3.匿名内部类实现4.lambda 表达式创建 Runnable 子类对象 四、线程的常见方法 一、线程的状态 //线程的状态是一个枚举类型 Thread.State public class ThreadS…...

最新入河排污口设置论证、水质影响预测与模拟、污水处理工艺分析及典型建设项目入河排污口方案报告书实例分析

随着水资源开发利用量不断增大&#xff0c;全国废污水排放量与日俱增&#xff0c;部分河段已远远超出水域纳污能力。近年来,部分沿岸入河排污口设置不合理&#xff0c;超标排污、未经同意私设排污口等问题逐步显现&#xff0c;已威胁到供水安全、水环境安全和水生态安全&#x…...

awk指令的详细指南

目录 工作原理 命令格式 awk常见的内建变量&#xff08;可直接用&#xff09;如下所示 按行输出文本 按字段输出文本 通过管道、双引号调用 Shell 命令 示例 CPU使用率 数组 ​编辑统计文件的内容出现的次数 使用awk 统计secure 访问日志中每个客户端IP的出现次数? …...

解密Netty中的Reactor模式

文章目录 单线程Reactor模式多线程Reactor模式Reactor模式中IO事件的处理流程Netty中的通道ChannelNetty中的反应器ReactorNetty中的处理器HandlerNetty中的通道Channel和处理器Handler的协作组件Pipeline Reactor(反应器)模式是高性能网络编程在设计和架构方面的基础模式.Doug…...

这是一个黑科技:C++爬虫~(文末报名C/C++领域新星计划)

目录 写在前面 完整代码 这里必看!! 写在最后 写在前面 现在所有人都知道万能的Python可以做机器学习,可以做人工智能,可以爬取各种小网站,但是你不知道,基于C++的正则表达式早就能够爬取各种网络数据啦!!你没猜错,阿玥将在这篇文章中简介怎么用C...

2023 年第八届数维杯数学建模挑战赛 赛题浅析

为了更好地让大家本次数维杯比赛选题&#xff0c;我将对本次比赛的题目进行简要浅析。本次比赛的选题中&#xff0c;研究生、本科组请从A、B题中任选一个 完成答卷&#xff0c;专科组请从B、C题中任选一个完成答卷。这也暗示了本次比赛的难度为A>B>C 选题人数初步估计也…...

Spring Boot单元测试

什么是单元测试&#xff1f; 单元测试(unit testing)&#xff0c;是指对软件中的最小可测试单元进行检查和验证的过程就叫单元测试。 单元测试是开发人员编写的一小段代码&#xff0c;用于检验被测代码的一个很小的、很明确的(代码) 功能是否正确。执行单元测试就是为了证明某…...

实景三维浪潮翻涌,新技术“席卷”石家庄!

5月11日&#xff0c;“全自主、全流程、全覆盖”2023实景三维新技术研讨会石家庄站暨航测与遥感学术交流会在石家庄凯旋金悦大酒店圆满举行。 本次会议由中国测绘学会、中国地理信息产业协会指导&#xff0c;河北省测绘学会、河北省地理信息产业协会主办&#xff0c;武汉大势智…...

【Python】使用小脚本

本文整理了我在学习和工作中用到的实用python脚本&#xff0c;希望也能帮助到需要的小伙伴~ 文章目录 视频格式转换顺序遍历文件夹中的文件 视频格式转换 安装视频处理库moviepy pip install moviepy安装FFmpeg&#xff08;FFmpeg是一个开源的多媒体框架&#xff0c;moviepy…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

【iOS】 Block再学习

iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...

文件上传漏洞防御全攻略

要全面防范文件上传漏洞&#xff0c;需构建多层防御体系&#xff0c;结合技术验证、存储隔离与权限控制&#xff1a; &#x1f512; 一、基础防护层 前端校验&#xff08;仅辅助&#xff09; 通过JavaScript限制文件后缀名&#xff08;白名单&#xff09;和大小&#xff0c;提…...

游戏开发中常见的战斗数值英文缩写对照表

游戏开发中常见的战斗数值英文缩写对照表 基础属性&#xff08;Basic Attributes&#xff09; 缩写英文全称中文释义常见使用场景HPHit Points / Health Points生命值角色生存状态MPMana Points / Magic Points魔法值技能释放资源SPStamina Points体力值动作消耗资源APAction…...

【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录

#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...

Linux中INADDR_ANY详解

在Linux网络编程中&#xff0c;INADDR_ANY 是一个特殊的IPv4地址常量&#xff08;定义在 <netinet/in.h> 头文件中&#xff09;&#xff0c;用于表示绑定到所有可用网络接口的地址。它是服务器程序中的常见用法&#xff0c;允许套接字监听所有本地IP地址上的连接请求。 关…...

成工fpga(知识星球号)——精品来袭

&#xff08;如需要相关的工程文件请关注知识星球&#xff1a;成工fpga&#xff0c;https://t.zsxq.com/DMeqH&#xff0c;关注即送200GB学习资料&#xff0c;链接已置顶&#xff01;&#xff09; 《孩子都能学会的FPGA》系列是成工完成的第一个系列&#xff0c;也有一年多的时…...