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

【DeepSeek学C++】 effective modern C++第33条款

auto f = [](auto x) {return func(norm(x));} 当norm区别对待左值和右值是, 上面lambda 是有问题的?

在这里插入图片描述
在这里插入图片描述

2 auto x 是按值传递(by value),无论传入的是左值还是右值,x 在 lambda 内部始终是具名左值 为什么?

等价于auto x = 10 。 x 是左值类型 , x 推到为int
当参数声明为auto x时,无论传入的是左值还是右值,x在内部都会变成具名左值。这个问题涉及到C++中的值传递机制和左值/右值的概念

左值和右值的基本定义。左值是指有持久状态的对象,可以取地址的,比如变量名、解引用的指针等。右值则是临时对象,比如字面量或表达式的结果,它们通常无法取地址,生命周期短暂。当函数参数按值传递时,不管是左值还是右值,参数都会被拷贝或移动到函数内部的变量中。这时候,这个内部变量是一个具名的变量,也就是左值。

那为什么按值传递的参数在函数内部会成为左值呢?因为一旦参数被传递到函数内部,它就有了一个名字,也就是参数名,比如这里的x。根据C++标准,任何具名的变量都是左值,即使它原本是用右值初始化的。例如,即使你传递一个临时对象(右值)给按值传递的参数,这个参数本身在函数内部是一个具名变量,因此是左值
在这里插入图片描述

3 完美转发底层原理

3.1 decltype 保留引用

在这里插入图片描述

在这里插入图片描述

http://www.dtcms.com/a/79865.html

相关文章:

  • Xcode16.1使用MonkeyDev运行Tiktok报错分析
  • 分享一个精灵图生成和拆分的实现
  • 可以高效记录工作生活琐事的提醒APP工具
  • MySQL教程 基本知识(基本原理和标准语言)
  • 回溯-组合总和
  • Three.js贴图技巧:优化性能与效果
  • 算法-深度优先搜索DFS
  • Redis 在windows下的下载安装与配置
  • 质检LIMS系统在诊所的应用 诊所质检行业的最优LIMS系统
  • knowledge-微前端(多个前端应用聚合的一个应用架构体系,每个小的应用可独立运行,独立开发,独立部署上线)
  • Linux与HTTP中的Cookie和Session
  • javaFX的使用
  • 如何在linux中利用方向键快速查找之前的敲过的命令
  • 第六:go 操作 redis-go
  • MediaPipe 手势识别全解析:如何在移动端实现实时手部跟踪
  • 网络空间安全(39)入侵排查
  • 【C++模板】
  • ambiq apollo3 Flash实例程序注释
  • 通过Typora + PicGo + 阿里云对象存储(OSS)实现图床
  • Numpy
  • 【vulhub/wordpress靶场】------获取webshell
  • 为什么 API 接口漏洞越来越多?与现代网站开发环境的关系
  • [Deepseek 学c++]初始化捕获与按值(显式与隐式)捕获傻傻分不清
  • 2025年云南食品安全员管理员考试题库
  • 代码随想录_动态规划
  • webpack等构建工具如何支持移除未使用的代码
  • 力扣hot100——三数之和(双指针)
  • 每天五分钟玩转深度学习PyTorch:基于pytorch搭建LSTM和GRU模型
  • 深度优先搜索(DFS)与广度优先搜索(BFS)全面解析 + 经典算法题实战(Java实现)
  • leetcode106 从中序与后序遍历序列构造二叉树