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

C++法则1:在 C++ 中,所有的具名变量都是左值,即使它们的类型是右值引用。

看下面例子:

 test(0)调用的是函数是:

template<typename T>
void test(T&& t) {std::cout << "右值引用" << std::endl;
}

 test(n)调用的是函数是:

 

template<typename T>
void test(T& t) {std::cout << "左值引用" << std::endl;
}

也就是说 0 是右值, n 是左值,现在假设我要把 n变为右值引用 ,让它调用test(T&& t)函数怎么做?

方案1:


 

方案2:

以下方法是错误的:

为什么?

这是因为 r1r2, 和 r3 本身都是左值,尽管它们被声明为右值引用(int&&)。

原因分析:

  1. 右值引用变量是左值
    虽然 r1r2r3 的类型是 int&&(右值引用),但它们本身是具名的变量,因此是左值。在 C++ 中,所有的具名变量都是左值即使它们的类型是右值引用。

  2. 函数重载解析规则

    • test(T& t) 接受一个左值引用,可以绑定到左值(如 r1r2r3)。

    • test(T&& t) 是一个转发引用(universal reference),但它只能绑定到右值(如临时对象或 std::move(x) 的结果)。由于 r1r2r3 是左值,所以不会匹配这个版本。

法则1:在 C++ 中,所有的具名变量都是左值,即使它们的类型是右值引用。

http://www.lryc.cn/news/573779.html

相关文章:

  • 云原生/容器相关概念记录
  • 第八章 网络安全
  • 基于Vue.js的图书管理系统前端界面设计
  • 包教包会,ES6类class的基本入门
  • TS类型啊啊啊2
  • 计算机系统结构课堂测验
  • Claude:Anthropic打造的安全优先AI助手
  • 2025中科院2区SCI-状态优化算法Status-based Optimization-附Matlab免费代码
  • 基于split-Bregman算法的L1正则化matlab仿真,对比GRSR算法
  • 《情感反诈模拟器》2025学习版
  • 【Redis】解码Redis中hash类型:理解基础命令,以及内部编码方式和使用场景
  • Docker Desktop 4.42集成的MCP工具包
  • 安卓对外发布工程源码:怎么做到仅UI层公布
  • linux-vim编辑器
  • Perplexity AI:对话式搜索引擎的革新者与未来认知操作系统
  • 课程专注度分析系统文档
  • DNS:互联网世界的隐形电话簿——深入解析域名解析系统
  • rust单体web项目模板搭建
  • json格式化、验证、压缩和转换json数据
  • C++ 第二阶段:类与对象 - 第三节:成员函数与访问权限
  • 理解贝叶斯分析中的“模型比较”部分
  • 【ISP】WDR and HDR
  • Netty ChannelPipeline和ChannelHandler详解
  • 61-Oracle SQL Monitor-实操
  • 多源异构数据接入与实时分析:衡石科技的技术突破
  • RabbitMQ从入门到实践:消息队列核心原理与典型应用场景
  • Java基础 6.22
  • 开源 python 应用 开发(一)python、pip、pyAutogui、python opencv安装
  • 通达信【千军趋势决策系统】幅图指标
  • idea2023+zulu-jdk+maven3.9.10