c++ - 为什么 C++ 标准不区分右值引用和转发引用?
问题描述
据我所知,C++ 标准不区分右值引用和转发引用。
我想知道这背后的原因。
如果我想编写一个只接受左值表达式的模板函数,请执行以下操作:
template<typename T>
void func(T& param);
但是如果我想写一个只接受右值表达式的模板函数:
template<typename T>
void func(T&& param);
事实证明,这个函数也接受左值表达式。
那么问题来了:这种语言设计背后的逻辑是什么?
解决方案
它也被称为通用参考。
顾名思义,它是一个通用引用,允许许多不同的类型。
如果您希望它保持 r 值 ref (T&&),则使用 , std:forward<T>(param)
,否则当您将其传递到使用它的任何位置时,请确保它是您想要的类型。
推荐阅读
- adobe-xd - 如何通过在 adobe XD 中滚动将下拉菜单修复为固定位置?
- multithreading - Is it better to use a thread or coroutine in Kotlin?
- laravel - How to Apply IF Where Condition in Laravel Collation
- c# - 从控制台中的特定坐标抓取文本
- yii2 - 使用带有 onchange 事件的创建表单更新表单
- node.js - 如何在 Nestjs 中获取所有路由(来自每个模块上可用的所有模块和控制器)?
- date - Unable to create Hive unique paritions
- javascript - Angular typeScript嵌套数组不可迭代?
- android - React native - should I use async storage or cookies?
- c# - 获得最高得分手