C++11特性简述

embedded/2025/1/18 9:18:09/

Lambda表达式

        捕获列表+参数列表(没有参数可以省略)+返回值+函数体

        类成员函数中定义lambda表达式可以捕获this指针,但是没有捕获函数参数的时候捕获this也不能访问函数参数

        自动推导返回值:必须是唯一形式的返回值类型才能推导出来,也就是不能出现二义性,比如返回列表时,由于数组和链表都可以以列表的形式返回,所以无法自动推导出返回值类型,这时就需要自己手动声明一下返回值类型 "->返回值类型"

foreach和lambda表达式的联系

        foreach 和 lambda 的联系在于,lambda 经常作为回调函数在 foreach 循环中使用。通过将 lambda 表达式与 foreach 结合使用,可以在循环中直接处理每一个元素,简化代码并使其更具表达力。

#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 使用 std::for_each 和 lambda 表达式std::for_each(vec.begin(), vec.end(), [](int& num) {num *= 2;  // 对每个元素执行操作});// 输出修改后的容器for (auto num : vec) {std::cout << num << " ";  // 输出:2 4 6 8 10}return 0;
}

final关键字

修饰类:类不能被继承

修饰虚函数:虚函数不能被重写

(虚函数表是编译阶段生成的,所有对象共享一个虚函数表)

右值引用

匿名对象:只存在在当前行

使用右值引用引用右值后,右值的生命周期延长了

右值引用是左值,左值引用也是左值

引用折叠:当在模版中使用自动推导时,如果是auto&&类型,传入左值就是左值引用,传入右值就是右值引用

C/C++中空指针的区别 (nullptr_t类型的引入)

        nullptr和NULL和0和(void*)0

        C语言中void*0可以隐式转换成其他类型的指针,C++中不可以,在C++11之前,通常使用NULL或者0代表空指针,但是当0或者NULL作为函数参数时可能会造成歧义,因为编译器无法分辨到底是指针类型还是整数类型,所以C++11引入了nullptr_t类型,此类型的唯一值是nullptr,代表空指针,避免了二义性。

void display(int value) {cout << "Integer: " << value << endl;
}void display(char* str) {if (str)cout << "String: " << str << endl;elsecout << "Null String" << endl;
}
display(0);  // 输出 "Integer: 0"
display(NULL);  // 有可能引发歧义
display(nullptr);  // 输出 "Null String"

 在模版编程中,nullptr可以帮助我们为了处理类型为空指针时的模版特化

template<typename T>
void debug(T ptr) {cout << "General template" << endl;
}template<>
void debug(nullptr_t) {cout << "Specialized template for nullptr" << endl;
}debug("Hello");  // 输出 "General template"
debug(nullptr);  // 输出 "Specialized template for nullptr"

判断程序是C还是C++

#ifdef __cplusplus
printf("C++");
#else
printf("C");
#endif

http://www.ppmy.cn/embedded/154899.html

相关文章

探秘Node.js模块Modules:从入门到精通

文章目录 一、引言二、Node.js 模块初相识2.1 模块的概念与意义2.2 模块的类型 三、Node.js 模块的使用方法3.1 核心模块的调用3.2 文件模块的创建与运用3.2.1 创建自定义模块3.2.2 引入自定义模块 3.3 ES Modules 的运用3.3.1 启用 ES Modules3.3.2 导入导出规则 四、node_mod…

python 利用 ddddocr包 ocr识别图片码

ddddocr 是一个轻量级的 OCR&#xff08;光学字符识别&#xff09;库&#xff0c;适用于识别图片中的文字&#xff0c;包括验证码等图像文本。要使用 ddddocr 进行图片验证码的识别&#xff0c;可以按照以下步骤进行&#xff1a; 1. 安装 ddddocr 包 首先&#xff0c;你需要安…

SpringMVC 实战指南:文件上传

第一章&#xff1a;常用的注解&#xff1a; RequestParam 注解&#xff1a; 作用&#xff1a;把请求中的指定名称的参数传递给控制器中的形参赋值属性&#xff1a; value&#xff1a;请求参数中的名称required&#xff1a;请求参数中是否必须提供此参数&#xff0c;默认值是 tr…

【华为战报】2024年12月 HCIP考试战报!

了解更多往期考试→点击查看&#xff1a; 【考试战报】 点击查看&#xff1a;​​​​​​0学试学 | 【华为课程】视频合集 2024年12月 微思 | HCIP 考试战报 部分学员成绩单 部分学员证书

怎样应对发现的小红书笔记详情API安全风险?

及时切断风险源 暂停 API 访问权限&#xff1a;一旦发现安全风险&#xff0c;如可疑的 API 调用行为&#xff08;异常高的请求频率、来自未授权 IP 地址的访问等&#xff09;&#xff0c;首先要做的是暂停可能涉及风险的 API 访问权限。如果是通过 API 密钥进行访问控制&#x…

1161 Merging Linked Lists (25)

Given two singly linked lists L1​a1​→a2​→⋯→an−1​→an​ and L2​b1​→b2​→⋯→bm−1​→bm​. If n≥2m, you are supposed to reverse and merge the shorter one into the longer one to obtain a list like a1​→a2​→bm​→a3​→a4​→bm−1​⋯. For ex…

[云讷科技] 用于软件验证的仿真环境

我们使用Pursuit自动驾驶仪为各种场景设计仿真环境&#xff0c;以便用户可以在模拟环境中直接验证他们的软件&#xff0c;无需现场测试。该环境基于Gazebo引擎。 1. 工作区目录 模拟环境的工作区位于提供的U盘中的~/pursuit_space/sitl_space_pursuit中。用户可以按照用户手册…

自动驾驶ADAS算法--测试工程环境搭建

测试环境 1、vs2022社区版本 2、onnx 3、opencv455 测试环境搭建和需要的文件下载 通过网盘分享的文件&#xff1a;附件 链接: https://pan.baidu.com/s/1F79g66nKa1jKoeeuY2Iygg 提取码: xwy8 环境搭建和配置 下载上述的文件并解压&#xff0c;解压后打开工程配置工程…