C++ 新特性

C++11 新特性

C++11 是 C++ 语言历史上一个重要的版本,它引入了许多现代化的语言特性,大大简化了 C++ 开发。

1.自动类型推导(auto
自动推导变量的类型,减少了类型声明的冗余。

auto x = 10;  // 自动推导为 int

 2.范围循环(Range-based for loops)

遍历容器的新语法,简化迭代器使用。

for (int i : arr) {
    std::cout << i;
}

 3.智能指针(std::shared_ptrstd::unique_ptr
引入智能指针来管理动态内存,避免内存泄漏。

 4.lambda 表达式(Lambda Expressions)
内联定义匿名函数,减少函数对象和回调的冗余代码。

auto add = [](int a, int b) { return a + b; };

 5.右值引用和移动语义(Rvalue References & Move Semantics)
提高对象转移的效率,减少不必要的拷贝。

std::vector<int> v1 = std::move(v2);  // v2 的资源被移动到 v1

 6.线程库(<thread>
标准化了多线程编程,提供了线程类、互斥量、条件变量等。

std::thread t([] { std::cout << "Hello, World!"; });
t.join();

 7.常量表达式(constexpr
允许在编译时计算常量,提高性能。

constexpr int square(int x) { return x * x; }

 8.枚举类(enum class
强类型枚举,避免普通枚举的隐式类型转换。

enum class Color { Red, Green, Blue };

9. 列表初始化(List Initialization)

//使用花括号 {} 可以初始化内置类型变量:
int x{5};          // 初始化为 5
double d{3.14};    // 初始化为 3.14
char c{'A'};       // 初始化为 'A'



//初始化数组和容器
int arr[] = {1, 2, 3, 4, 5};  // 初始化数组
std::vector<int> vec{1, 2, 3, 4, 5};  // 初始化 vector

std::map<std::string, int> m{
    {"apple", 1},
    {"banana", 2},
    {"cherry", 3}
};  // 初始化 map



//防止窄化转换
int x1 = 3.14;   // 允许,x1 的值为 3,发生了隐式转换
int x2{3.14};    // 错误,编译器会报错,防止窄化转换

double d1 = 1e40f;  // 允许,从 float 转为 double
float f1{1e40};     // 错误,1e40 超出了 float 的范围



//初始化类对象
//列表初始化可以用于初始化类对象,包括使用构造函数和聚合类型初始化:
class Point {
public:
    int x;
    int y;
    Point(int x_val, int y_val) : x{x_val}, y{y_val} {}
};

Point p1{10, 20};  // 使用构造函数初始化

//对于没有用户定义构造函数的聚合类型,也可以使用列表初始化:
struct Person {
    std::string name;
    int age;
};

Person p2{"Alice", 30};  // 直接初始化结构体成员



//列表初始化可以与 std::initializer_list 结合使用,允许类接收初始化列表作为参数:
class MyVector {
public:
    std::vector<int> data;
    MyVector(std::initializer_list<int> il) : data(il) {}
};

MyVector mv{1, 2, 3, 4, 5};  // 使用初始化列表构造 MyVector 对象



//使用空的花括号 {} 可以对变量进行值初始化(Value Initialization):
int n{};             // n 初始化为 0
double d{};          // d 初始化为 0.0
std::string s{};     // s 初始化为空字符串
int* ptr{};          // ptr 初始化为 nullptr

C++20 新特性

C++20 是继 C++11 之后又一个重要的版本,引入了大量新特性,尤其是协程和概念(Concepts)。

1.协程(Coroutines)
通过 co_awaitco_yieldco_return 实现异步编程模型。

Task async_func() {
    co_await some_task();
}

2.概念(Concepts)
用于限制模板参数的类型,提高模板代码的可读性和调试能力。

template<typename T>
concept Integral = std::is_integral_v<T>;

template<Integral T>
T add(T a, T b) {
    return a + b;
}

 3.范围库(Ranges Library)
大幅提升标准库对集合操作的支持,允许对容器执行类似 filtermapreduce 的操作。

std::vector<int> v = {1, 2, 3, 4, 5};
auto result = v | std::views::filter([](int n) { return n % 2 == 0; });

 4.三路比较运算符(<=>
引入 "太空飞船" 操作符,实现全面的比较运算。

struct Point {
    int x, y;
    auto operator<=>(const Point&) const = default;
};

5.模块化(Modules)
模块化系统提供了比头文件更加高效的代码组织和编译方式。

C++20 模块化(Modules)-CSDN博客

export module math;
export int add(int a, int b) {
    return a + b;
}

 6.constexpr 的扩展
允许更多的标准库函数(如 std::vector 等)在 constexpr 上下文中使用。

7.std::span<T>
表示对数组、容器的视图,避免拷贝操作。 

void print(std::span<int> data) {
    for (int i : data) std::cout << i << ' ';
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

京东商品属性的详细api数据解析:颜色、尺寸与材质

京东&#xff08;JD.com&#xff09;作为一个大型电商平台&#xff0c;其商品信息通过API接口提供给开发者或第三方服务使用&#xff0c;以便进行商品搜索、展示、分析等操作。然而&#xff0c;直接访问京东的详细商品属性&#xff08;如颜色、尺寸、材质等&#xff09;API通常…

uniapp|微信小程序 实现输入四位数 空格隔开

<template><page-meta :page-style"cssVar"></page-meta><view class"container"><u-navbartitle"优惠券兑换"placeholderbgColor"#fff":autoBack"true":titleStyle"{fontFamily: SourceHa…

Maven Helper 插件

推荐指数&#xff1a;★★★★★ 分析依赖冲突插件 Maven Helper插件就可免去命令行困扰。通过界面解决依赖冲突。 点击此按钮&#xff0c;切换到此工具栏 可进行相应操作&#xff1a; Conflicts&#xff08;查看冲突&#xff09;All Dependencies as List&#xff08;列表形…

Java 在 GIS 领域的学习路线?

Java是一门广泛应用于企业级开发的编程语言&#xff0c;而GIS则是一种常用于地理信息处理和分析的技术。将Java与GIS结合起来&#xff0c;可以在企业级应用中实现更多的功能和业务需求&#xff0c;且在实际领域越来越广泛。 Java在GIS中重要的作用 1、跨平台性 Java具有跨平台…

鸿蒙HarmonyOS开发:一次开发,多端部署(界面级)天气应用案例

文章目录 一、布局简介二、典型布局场景三、侧边栏 SideBarContainer1、子组件2、属性3、事件 四、案例 天气应用1、UX设计2、实现分析3、主页整体实现4、具体代码 五、运行效果 一、布局简介 布局可以分为自适应布局和响应式布局&#xff0c;二者的介绍如下表所示。 名称简介…

搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(一)-概述

简介 此前的专栏介绍Onesearch1.0和2.0&#xff0c;详情参考4 参考资料&#xff0c;本文解释onesearch 3.0&#xff0c;从Elasticsearch6升级到Elasticsearch8代码实现 &#xff0c;Elasticsearch8 废弃了high rest client&#xff0c;使用新的ElasticsearchClient&#xff0c;…

uniapp 如何自定义导航栏并自适应机型

如今的移动设备有各种不同的屏幕形状&#xff0c;如刘海屏、水滴屏等。这些异形屏会影响页面的布局&#xff0c;尤其是导航栏和底部栏的显示。通过获取安全区域信息&#xff0c;可以确保页面内容不会被异形屏的特殊区域遮挡。 在设计页面顶部导航栏时&#xff0c;可以根据 saf…

模拟自然的本质:与IBM量子计算研究的问答

量子计算可能是计算领域的下一个重大突破&#xff0c;但它的一般概念仍然处于炒作和猜测的现状&#xff1f;它能破解所有已知的加密算法吗&#xff1f;它能设计出治愈所有疾病的新分子吗&#xff1f;它能很好地模拟过去和未来&#xff0c;以至于尼克奥弗曼能和他死去的儿子说话…

【Redis入门到精通二】Redis核心数据类型(String,Hash)详解

目录 Redis数据类型 1.String类型 &#xff08;1&#xff09;常见命令 &#xff08;2&#xff09;内部编码 2.Hash类型 &#xff08;1&#xff09;常见命令 &#xff08;2&#xff09;内部编码 Redis数据类型 查阅Redis官方文档可知&#xff0c;Redis提供给用户的核心数据…

dockercompose指定配置文件

dockercompose指定配置文件 文件名字必须是以下的集中形式&#xff1a; docker-compose.yaml docker-compose.yml compose.yaml compose.yml 其他名字就失败的。 一般白眉大叔都是用 compose.yaml 这个格式&#xff0c; 用习惯了。 但是我们必须知道它有几种格式都是可以…

如何利用nw.js打包vue项目

引言 最近有一个开发windows桌面应用的需求, 需要将vue项目打包成.exe文件&#xff0c;最好是变成可安装版(非绿色版)。特此记录一下如何通过nw.js将vue项目打包成.exe。可能这种方式不是最优&#xff0c;仅供大家参考&#xff01; nw.js简介&#xff08;以下描述来自nw.js官…

C#|.net core 基础 - 扩展数组添加删除性能最好的方法

今天在编码的时候遇到了一个问题&#xff0c;需要对数组变量添加新元素和删除元素&#xff0c;因为数组是固定大小的&#xff0c;因此对新增和删除并不友好&#xff0c;但有时候又会用到&#xff0c;因此想针对数组封装两个扩展方法&#xff1a;新增元素与删除元素&#xff0c;…

大数据概念与价值

文章目录 引言大数据的概念高德纳咨询公司的定义麦肯锡全球研究所的定义什么是大数据&#xff1f; 大数据的特征Volume&#xff08;体积&#xff09;Variety&#xff08;种类&#xff09;Velocity&#xff08;速度&#xff09;Value&#xff08;价值&#xff09;Veracity&#…

【Redis入门到精通三】Redis核心数据类型(List,Set)详解

目录 Redis数据类型 ​编辑 1.List类型 &#xff08;1&#xff09;常见命令 &#xff08;2&#xff09;内部编码 2.Set类型 &#xff08;1&#xff09;常见命令 &#xff08;2&#xff09;内部编码 Redis数据类型 查阅Redis官方文档可知&#xff0c;Redis提供给用户的核…

ASP.NET Core高效管理字符串集合

我们在开发 Web 项目时经常遇到需要管理各种来源的字符串集合&#xff08;例如HTTP 标头、查询字符串、设置的值等&#xff09;的情况。合理的管理这些字符串集合不仅可以减少出bug的几率&#xff0c;也能提高应用程序的性能。ASP.NET Core 为我们提供了一种特殊的只读结构体 S…

多层感知机paddle

多层感知机——paddle部分 本文部分为paddle框架以及部分理论分析&#xff0c;torch框架对应代码可见多层感知机 import paddle print("paddle version:",paddle.__version__)paddle version: 2.6.1多层感知机&#xff08;MLP&#xff0c;也称为神经网络&#xff0…

有关JS下隐藏的敏感信息

免责声明&#xff1a;本文仅做分享&#xff01; 目录 JavaScript 介绍 核心组成 工具 FindSomething ** 浏览器检查 ** LinkFinder URLfinder ** SuperSearchPlus ** ffuf ParasCollector waymore Packer Fuzzer JS逆向 应用&#xff1a; 小结&#xff1a; Ja…

java-----IDE(集成开发环境)

IDE&#xff08;集成开发环境&#xff09; IDE&#xff08;集成开发环境&#xff09;-IDEA IDEA 介绍 1) IDEA 全称 IntelliJ IDEA2) 在业界被公认为最好的Java开发工具3) IDEA是JetBrains 公司的产品&#xff0c;总部位于捷克的首都布拉格4) 除了支持Java开发&#xff0c;还…

54.【C语言】 字符函数和字符串函数(strncpy,strncat,strncmp函数)

和strcpy,strcat,strcmp函数对应的是strncpy,strncat,strncmp函数 8.strncpy函数 *简单使用 cplusplus的介绍 点我跳转 翻译: 函数 strncpy char * strncpy ( char * destination, const char * source, size_t num ); 从字符串中复制一些字符 复制源(source)字符串的前num个…

【专题】2024新能源企业“出海”系列之驶向中东、东南亚报告合集PDF分享(附原数据表)

原文链接&#xff1a; https://tecdat.cn/?p37698 在“双碳”目标引领下&#xff0c;中国新能源产业近年迅猛发展&#xff0c;新能源企业凭借技术革新、政策支持与市场驱动实现快速增长&#xff0c;在产业链完备、技术领先、生产效能及成本控制等方面优势显著。面对国内外环境…