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

C++ primer plus--探讨 C++ 新标准

18 探讨 C++ 新标准

18.1 复习前面介绍过的 C++11 功能

(1)C++11 扩大了列表初始化的适用范围,使用初始化列表时,可以不加等号。

int x = {5};
float y {1.1};
short arr[5] {1, 2, 3, 4, 5};
int* ar = new int[4] {1, 2, 3, 4};
vector<int> a{1, 2};

(2)auto 可自动推断类型。

(3)nullptr:空指针是不会指向任何有效数据的指针。

18.2 移动语义和右值引用

(1)左值引用与右值引用

  • 左值:可以取地址的、有名字的、非临时的;

  • 右值:不可取地址、没有名字的、临时的,如立即数、函数返回值等

1)左值引用

左值引用在汇编层面其实和普通的指针是一样的,引用就是该变量的别名,因此需要知道被引用变量的地址。

左值引用示例:

int a = 10;
int& b = a;  //定义左值并引用int& c = 10;   //错误的,无法对 10 进行取地址操作

2)右值引用

类型 && 引用名 = 右值表达式;

int && b = 10;   //对 10 进行引用,其生存周期也会延长

通过右值引用,原本会被销毁的右值的生存周期会延长至与其绑定的右值引用一致。

18.3 新的类功能
18.4 Lambda 函数

Lambda 函数就地定义匿名目标函数,不需要额外写一个命名函数;可以使代码更加紧凑、简洁,增强可读性。适合用于写一些简单的函数。

参考:http://c.biancheng.net/view/3741.html

https://zhuanlan.zhihu.com/p/384314474

完整的 Lambda 表达式形式如下:

  • capture:捕获列表,可以将局部自动变量传入 Lambda 表达式内部;其中:
    [] 不捕获任何变量;
    [&] 捕获外部作用域中所有变量,并作为引用在函数体中使用(按引用捕获);
    [=] 捕获外部作用域中所有变量,并作为副本在函数体中使用(按值捕获);
    [=,&foo] 按值捕获外部作用域中所有变量,并按引用捕获 foo 变量;
    [bar] 按值捕获 bar 变量,同时不捕获其他变量。

  • parameters:传入参数,和普通函数一样;

  • mutable:可省略,该关键字允许在函数体内修改按值捕获的参数,但这种改变并不能传递到定义体之外(即原参数并不会改变,改变的是传入的副本)。

  • return_type:函数返回值类型,视情况可以省略;

  • statement:函数体。

示例:

bool func(int x) {return x%3==0;}//写成 Lambda 函数
[](int x) -> bool{return x%3==0;}//能被3整除的元素个数
std::vector<int> nums;
counts = std::count_if(nums.begin(), nums.end(), [](int x) -> bool{return x%3==0;});
18.5 包装器
18.6 可变参数模板
18.7 C++11 新增的其他功能
18.8 语言变化
http://www.lryc.cn/news/183178.html

相关文章:

  • 2023版 STM32实战6 输出比较(PWM)包含F407/F103方式
  • 选择排序算法:简单但有效的排序方法
  • 安卓教材学习
  • C++设计模式-生成器(Builder)
  • CTFHUB - SSRF
  • 边缘计算网关
  • 1800_vim的宏录制功能尝试
  • Ultra-Fast-Lane-Detection-v2 {后处理优化}//参考
  • 【面试题精讲】Java静态方法和实例方法有何不同?
  • 【数据结构】布隆过滤器
  • linux基础4---内存
  • 图论---拓扑排序
  • java Spring Boot 将日志写入文件中记录
  • Android 开发错误集合
  • VSCode个人设置习惯
  • 代码随想录训练营二刷第四十七天 | 70. 爬楼梯 (进阶) 322. 零钱兑换 279.完全平方数
  • beego-简单项目写法--后续放到git上
  • 【算法|动态规划No.9】leetcodeLCR 091. 粉刷房子
  • 基于SpringBoot的图书进销存管理系统
  • 回归预测 | MATLAB实现PSO-SVR粒子群优化支持向量机回归多输入单输出预测
  • vue3使用v-model控制子组件进行双向数据绑定
  • .netCore .net5,6,7 存日志文件
  • 【数据结构---排序】很详细的哦
  • GitHub爬虫项目详解
  • 辅助驾驶功能开发-功能对标篇(7)-NOA领航辅助系统-上汽荣威
  • 第0次 序言
  • ESP32设备驱动-OLED显示单个或多个DS18B20传感器数据
  • MongoDB快速上手
  • maven 初学
  • 解决WPF+Avalonia在openKylin系统下默认字体问题