C++11 引入了的新特性与实例说明
C++11 引入了许多重要的新特性,以下是一些关键特性及其对应的示例代码,用于体现这些特性的用法和优势。
1. 自动类型推导 (auto)
auto 关键字允许编译器自动推导变量的类型,简化代码书写。
#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 使用 auto 自动推导迭代器类型for (auto it = vec.begin(); it != vec.end(); ++it) {std::cout << *it << " ";}// 使用 auto 推导元素类型for (auto& value : vec) {std::cout << value << " ";}return 0;
}
2. 范围基于的 for 循环
范围 for 循环简化了对容器或数组的遍历。
#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 使用范围 for 循环遍历容器for (const auto& value : vec) {std::cout << value << " ";}return 0;
}
3. Lambda 表达式
Lambda 表达式允许在代码中定义匿名函数,常用于简化回调函数或算法中的函数对象。
#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 使用 Lambda 表达式作为谓词std::sort(vec.begin(), vec.end(), [](int a, int b) {return a > b; // 降序排序});for (const auto& value : vec) {std::cout << value << " ";}return 0;
}
4. 右值引用和移动语义 (std::move)
右值引用和移动语义允许高效地转移资源,避免不必要的拷贝。
#include <iostream>
#include <string>class MyString {
public:MyString(const char* str) {std::cout << "Constructor called!" << std::endl;size = strlen(str);data = new char[size + 1];memcpy(data, str, size + 1);}// 移动构造函数MyString(MyString&& other) noexcept {std::cout << "Move constructor called!" << std::endl;data = other.data;size = other.size;other.data = nullptr;other.size = 0;}~MyString() {delete[] data;}void print() const {std::cout << data << std::endl;}private:char* data;size_t size;
};int main() {MyString s1("Hello");MyString s2 = std::move(s1); // 调用移动构造函数s2.print(); // 输出: Hello// s1.print(); // 错误:s1 的资源已被转移return 0;
}
5. 智能指针 (std::unique_ptr, std::shared_ptr)
智能指针用于自动管理动态内存,避免内存泄漏。
#include <iostream>
#include <memory>class MyClass {
public:MyClass() {std::cout << "MyClass constructed!" << std::endl;}~MyClass() {std::cout << "MyClass destroyed!" << std::endl;}void doSomething() {std::cout << "Doing something!" << std::endl;}
};int main() {// 使用 std::unique_ptrstd::unique_ptr<MyClass> ptr1(new MyClass());ptr1->doSomething();// 使用 std::shared_ptrstd::shared_ptr<MyClass> ptr2 = std::make_shared<MyClass>();ptr2->doSomething();return 0;
}
6. nullptr 关键字
nullptr 用于替代 NULL,表示空指针,避免类型歧义。
#include <iostream>void foo(int* ptr) {if (ptr) {std::cout << "Pointer is not null!" << std::endl;} else {std::cout << "Pointer is null!" << std::endl;}
}int main() {int* ptr = nullptr;foo(ptr); // 输出: Pointer is null!int x = 10;ptr = &x;foo(ptr); // 输出: Pointer is not null!return 0;
}
7. std::thread 多线程支持
C++11 引入了标准库对多线程的支持。
#include <iostream>
#include <thread>void threadFunction() {std::cout << "Hello from thread!" << std::endl;
}int main() {std::thread t(threadFunction);t.join(); // 等待线程结束std::cout << "Main thread finished!" << std::endl;return 0;
}
8. std::function 和 std::bind
std::function 用于存储可调用对象,std::bind 用于绑定参数。
#include <iostream>
#include <functional>void printSum(int a, int b) {std::cout << "Sum: " << a + b << std::endl;
}int main() {// 使用 std::function 存储可调用对象std::function<void(int, int)> func = printSum;func(2, 3); // 输出: Sum: 5// 使用 std::bind 绑定参数auto boundFunc = std::bind(printSum, 10, std::placeholders::_1);boundFunc(5); // 输出: Sum: 15return 0;
}
9. constexpr 常量表达式
constexpr 用于在编译时计算常量表达式。
#include <iostream>constexpr int factorial(int n) {return (n <= 1) ? 1 : n * factorial(n - 1);
}int main() {constexpr int result = factorial(5); // 编译时计算std::cout << "Factorial of 5: " << result << std::endl; // 输出: 120return 0;
}
10. std::array 和 std::tuple
std::array 是固定大小的数组容器,std::tuple 用于存储多个不同类型的值。
#include <iostream>
#include <array>
#include <tuple>int main() {// 使用 std::arraystd::array<int, 3> arr = {1, 2, 3};for (const auto& value : arr) {std::cout << value << " ";}std::cout << std::endl;// 使用 std::tuplestd::tuple<int, double, std::string> tup(10, 3.14, "Hello");std::cout << std::get<0>(tup) << " " << std::get<1>(tup) << " " << std::get<2>(tup) << std::endl;return 0;
}
总结
以上示例展示了 C++11 中一些重要的新特性,包括自动类型推导、范围 for 循环、Lambda 表达式、移动语义、智能指针、nullptr、多线程支持、std::function 和 std::bind、constexpr 以及 std::array 和 std::tuple。这些特性极大地提高了 C++ 的现代化编程能力。
相关文章:
C++11 引入了的新特性与实例说明
C11 引入了许多重要的新特性,以下是一些关键特性及其对应的示例代码,用于体现这些特性的用法和优势。 1. 自动类型推导 (auto) auto 关键字允许编译器自动推导变量的类型,简化代码书写。 #include <iostream> #include <vector>…...
二手Mac验机过程
1.1 外观检查 螺丝是否拧过螺丝 1.2 关于本机中 序列号,盒子序列号,机器背部 核对参数 https://checkcoverage.apple.com/coverage 1.3 检查apple ID与查找 1 登出 iCloud、iTunes、FaceTime、iMessage 在 Mac 上打開「訊息」應用程式,從上方…...
从 0 到 1 掌握鸿蒙 AudioRenderer 音频渲染:我的自学笔记与踩坑实录(API 14)
最近我在研究 HarmonyOS 音频开发。在音视频领域,鸿蒙的 AudioKit 框架提供了 AVPlayer 和 AudioRenderer 两种方案。AVPlayer 适合快速实现播放功能,而 AudioRenderer 允许更底层的音频处理,适合定制化需求。本文将以一个开发者的自学视角&a…...
Android 13深度定制:SystemUI状态栏时间居中显示终极实战指南
一、架构设计与技术解析 1. SystemUI状态栏核心布局机制 层级结构 mermaid 复制 graph TDPhoneStatusBarView --> StatusBarContents[status_bar_contents]StatusBarContents --> LeftLayout[status_bar_left_side]StatusBarContents --> ClockLayout[Clock控件]Left…...
支持多系统多协议且可提速的下载工具
在网络下载需求日益多样的当下,一款好用的下载器能极大提升效率。今天就给大家介绍 AB Download Manager,它免费又开源,能适配 Windows 和 Linux 系统,带来超便捷的下载体验。 AB Download Manager 采用先进的多线程技术…...
【leetcode hot 100 22】括号生成
解法一:(回溯法)用两个整数记录左右括号数,以在回溯过程中保证先生成左括号,且左右括号数不能大于n。 class Solution {public List<String> generateParenthesis(int n) {List<String> result new Arra…...
如何在 HTML 中创建一个有序列表和无序列表,它们的语义有何不同?
大白话如何在 HTML 中创建一个有序列表和无序列表,它们的语义有何不同? 1. HTML 中有序列表和无序列表的基本概念 在 HTML 里,列表是一种用来组织信息的方式。有序列表就是带有编号的列表,它可以让内容按照一定的顺序呈现&#…...
【武汉·4月11日】Parasoft联合光庭信息研讨会|邀您共探AI赋能新机遇
Parasoft联合光庭信息Workshop邀您共探AI赋能新机遇 AI浪潮已至,你准备好了吗? 在智能网联汽车飞速发展的今天,AI技术正以前所未有的速度重塑行业生态。如何把握AI机遇,赋能企业创新? 4月11日,自动化软件…...
PHP PSR(PHP Standards Recommendations)介绍
PHP PSR(PHP Standards Recommendations)是 PHP 社区制定的一系列标准化规范,旨在统一 PHP 代码的编写方式、接口设计和开发实践,以提高代码的可读性、可维护性和互操作性。以下是核心 PSR 标准的解读和具体使用方法: …...
闻所闻尽:穿透声音的寂静,照见生命的本真
在《楞严经》的梵音缭绕中,"闻所闻尽"四个字如晨钟暮鼓,叩击着每个修行者的心门。这个源自观世音菩萨耳根圆通法门的核心概念,既是佛门修行的次第指引,更蕴含着东方哲学对生命本质的终极叩问。当我们穿越时空的帷幕&…...
F28335进入非法中断ILLEGAL_ISR定位
在非法中断函数中,再调用一个函数接口,比如save_illegal_error(),然后在save_illegal_error中实现如下代码: g_illegal_isr_sp 0;(这个是全局变量,需要先定义 ) asm( “ MOVW ACC, SP\n” " MOVL …...
PreparedStatement 和 Statement 从 功能、性能、安全性、适用场景 等维度详细对比分析
以下是 PreparedStatement 和 Statement 的对比分析,从 功能、性能、安全性、适用场景 等维度详细说明: 1. 核心区别 特性PreparedStatementStatement定义预编译的 SQL 语句,支持参数化查询执行静态 SQL 语句,不支持参数占位符安…...
VLAN综合实验报告
一、实验拓扑 网络拓扑结构包括三台交换机(LSW1、LSW2、LSW3)、一台路由器(AR1)以及六台PC(PC1-PC6)。交换机之间通过Trunk链路相连,交换机与PC、路由器通过Access或Hybrid链路连接。 二、实验…...
使用 Docker 部署 mysql 应用
使用 Docker 部署 环境搭建 Docker 安装文档 创建容器 在系统任意位置创建一个文件夹(可选) mkdir -p /opt/docker/mysql && cd /opt/docker/mysqlmkdir ./{conf,data,logs}搜索 & 拉取镜像 docker search mysql docker pull mysql:5.6启…...
美团Leaf分布式ID实战:深入解析雪花算法原理与应用
📖 前言 在分布式系统中,全局唯一ID生成是保证数据一致性的核心技术之一。传统方案(如数据库自增ID、UUID)存在性能瓶颈或无序性问题,而美团开源的Leaf框架提供了高可用、高性能的分布式ID解决方案。本文重点解析Leaf…...
Midjourney使用教程—2.作品修改
当您已生成第一张Midjourney图像的时候,接下来该做什么?了解我们用于修改图像的工具!使用 Midjourney 制作图像后,您的创意之旅就不会止步于此。您可以使用各种工具来修改和增强图像。 一、放大操作 Midjourney每次会根据提示词…...
【人工智能】LM Studio 的 GPU 加速:释放大模型推理潜能的极致优化
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着大语言模型(LLM)的广泛应用,其推理效率成为限制性能的关键瓶颈。LM Studio 作为一个轻量级机器学习框架,通过 GPU 加速显著提升了大…...
S32K144入门笔记(十七):PDB的API函数解读
文章目录 1. SDK中的函数2. API函数的释义 1. SDK中的函数 在SDK中并没有转为PDB设置专门的PAL驱动,在基本的DRIVER库中一共有21个API函数,本文将解读这些函数的功能。 2. API函数的释义 void PDB_DRV_Init(const uint32_t instance,const pdb_timer_…...
3.5 平滑滤波
请注意:笔记内容片面粗浅,请读者批判着阅读! 一、引言 平滑空间滤波是数字图像处理中用于降低噪声和模糊细节的核心技术,常用于图像预处理或特定场景下的视觉效果优化。其核心思想是通过邻域像素的加权平均或统计操作,抑制高频噪…...
自动化测试框架pytest+requests+allure
Pytest requests Allure 这个框架基于python的的 Pytest 进行测试执行,并结合 Allure插件 生成测试报告的测试框架。采用 关键字驱动 方式,使测试用例更加清晰、模块化,同时支持 YAML 文件来管理测试用例,方便维护和扩展。 测试…...
Sympy入门之微积分基本运算
Sympy是一个专注于符号数学计算的数学工具,使得用户可以轻松地进行复杂的符号运算,如求解方程、求导数、积分、级数展开、矩阵运算等。本文,我们将详细讲解Sympy在微积分运算中的应用。 获取方式 pip install -i https://mirrors.tuna.tsin…...
Qemu-STM32(十):STM32F103开篇
简介 本系列博客主要描述了STM32F103的qemu模拟器实现,进行该项目的原因有两点: 作者在高铁上,想在STM32F103上验证一个软件框架时,如果此时掏出开发板,然后接一堆的线,旁边的人估计会投来异样的目光,特别…...
在 ABAP 开发工具 (ADT-ABAP Development Tools) 中创建ABAP 项目
第一步:安装 SAP NetWeaver 的 ABAP 开发工具 (ADT) 开发工具下载地址:https://tools.hana.ondemand.com/#abap 也可以在SAP Development Tools下载工具页面直接跳转到对应公开课教程页面,按课程步骤下载eclipse解压安装即可,过程…...
【架构】单体架构 vs 微服务架构:如何选择最适合你的技术方案?
文章目录 ⭐前言⭐一、架构设计的本质差异🌟1、代码与数据结构的对比🌟2、技术栈的灵活性 ⭐二、开发与维护的成本博弈🌟1、开发效率的阶段性差异🌟2、维护成本的隐形陷阱 ⭐三、部署与扩展的实战策略🌟1、部署模式的本…...
【鸿蒙开发】Hi3861学习笔记- WIFI应用AP建立网络
00. 目录 文章目录 00. 目录01. LwIP简介02. AP模式简介03. API描述3.1 RegisterWifiEvent3.2 UnRegisterWifiEvent3.3 GetStationList3.4 GetSignalLevel3.5 EnableHotspot3.6 DisableHotspot3.7 SetHotspotConfig3.8 GetHotspotConfig3.9 IsHotspotActive 04. 硬件设计05. 模…...
大模型的微调技术(高效微调原理篇)
背景 公司有需求做农业方向的大模型应用以及Agent助手,那么适配农业数据就非常重要。但众所周知,大模型的全量微调对算力资源要求巨大,在现实的限制条件下基本“玩不起”,那么高效微调技术就非常必要。为了更好地对微调技术选型和…...
区间震荡指标
区间震荡指标的逻辑如下: 一、函数注解 1. Summation函数 功能: 计算给定价格序列Price的前Length个数据点的和,或在数据点数量超过Length时,计算滚动窗口内的价格和。 参数: Price(1):价格序列&#…...
HCIE-SLAAC
文章目录 SLAAC 🏡作者主页:点击! 🤖Datacom专栏:点击! ⏰️创作时间:2025年03月21日10点58分 SLAAC 帮助设备发现本地直连链路相连的设备,并获取与地址自动配置的相关前缀和其他…...
JavaScript | 爬虫逆向 | 掌握基础 | 01
一、摘要 实践是最好的导师 二、环境配置 在开始之前,需要确保你的计算机上已经安装了 Node.js。Node.js 是一个开源的、跨平台的 JavaScript 运行时环境,它允许你在服务器端运行 JavaScript 代码。 1. 下载 安装地址:https://nodejs.org…...
【PCIe 总线及设备入门学习专栏 3.2 -- PCIe 在进行大数据搬运时是如何组包的?】
文章目录 Overview1. PCIe数据传输的核心机制(1) 数据分割(2) TLP头部构造(3) 数据链路层封装(4) 物理层传输2. GPU从内存搬运数据的组包流程场景示例:3. 优化机制(1) 大页传输(TLP合并)(2) 流量控制与信用机制(3) 地址对齐优化4. 完整示例5. 性能影响Overview 本文将详细介…...
