具有适用于左值和右值的引用参数的 C++ 函数

2024-03-05

我想要一个 C++ 函数,它接受一个参数,即一个引用,并且适用于左值和右值相同的语法.

举个例子:

#include <iostream>
using namespace std;

void triple_lvalue(int &n) {
  n *= 3;
  cout << "Inside function: " << n << endl;
}

void triple_rvalue(int &&n) {
  n *= 3;
  cout << "Inside function: " << n << endl;
}

int main() {
  int n = 3;
  triple_lvalue(n);
  cout << "Outside function: " << n << endl;
  triple_rvalue(5);
}

Output:

Inside function: 9
Outside function: 9
Inside function: 15

这段代码有效。但我的案例需要两个不同的函数,第一个函数是我通过的n(左值)和3(右值)。我希望我的函数的语法能够很好地处理两者,而不需要重复任何代码。

谢谢你!


这是什么转发参考 https://en.cppreference.com/w/cpp/language/reference#Forwarding_references应该做的。它可以与左值和右值一起使用,并保留函数参数的值类别。

转发引用是一种特殊的引用,它保留 函数参数的值类别,使得可以 通过以下方式转发std::forward https://en.cppreference.com/w/cpp/utility/forward.

e.g.

template <typename T>
void triple_value(T &&n) {
  n *= 3;
  cout << "Inside function: " << n << endl;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有适用于左值和右值的引用参数的 C++ 函数 的相关文章

  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 如何进行带有偏差的浮点舍入(始终向上或向下舍入)?

    我想以偏置舍入浮动 要么总是向下 要么总是向上 代码中有一个特定的点 我需要这个 程序的其余部分应该像往常一样四舍五入到最接近的值 例如 我想四舍五入到最接近的 1 10 倍数 最接近 7 10 的浮点数约为 0 69999998807 但
  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • try-catch 中未处理的异常

    try list from XElement e in d Descendants wix File where e Attribute Name Value Contains temp Name e Parent Parent Attri
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • 单元测试失败,异常代码为 c0000005

    我正在尝试使用本机单元测试项目在 Visual Studios 2012 中创建单元测试 这是我的测试 TEST METHOD CalculationsRoundTests int result Calculations Round 1 0
  • “MyClass”的类型初始值设定项引发异常

    以下是我的Windows服务代码 当我调试代码时 我收到错误 异常 CSMessageUtility CSDetails 的类型初始值设定项引发异常 using System using System Collections Generic
  • C# using 语句、SQL 和 SqlConnection

    使用 using 语句 C SQL 可以吗 private static void CreateCommand string queryString string connectionString using SqlConnection c
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons
  • 通过等待任务或访问其 Exception 属性都没有观察到任务的异常

    这些是我的任务 我应该如何修改它们以防止出现此错误 我检查了其他类似的线程 但我正在使用等待并继续 那么这个错误是怎么发生的呢 通过等待任务或访问其 Exception 属性都没有观察到任务的异常 结果 未观察到的异常被终结器线程重新抛出
  • C# 搜索目录中包含字符串的所有文件,然后返回该字符串

    使用用户在文本框中输入的内容 我想搜索目录中的哪个文件包含该文本 然后我想解析出信息 但我似乎找不到该字符串或至少返回信息 任何帮助将不胜感激 我当前的代码 private void btnSearchSerial Click object
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行
  • 为什么我使用google'smtp'无法发送电子邮件?

    我有以下程序使用 smtp gmail com 587 发送电子邮件 namespace TestMailServer class Program static void Main string args MailMessage mail
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 过度使用委托对性能来说是一个坏主意吗? [复制]

    这个问题在这里已经有答案了 考虑以下代码 if IsDebuggingEnabled instance Log GetDetailedDebugInfo GetDetailedDebugInfo 可能是一个昂贵的方法 因此我们只想在调试模式
  • boost::program_options:带有固定和可变标记的参数?

    是否可以在 boost program options 中使用此类参数 program p1 123 p2 234 p3 345 p12 678 即 是否可以使用第一个标记指定参数名称 例如 p 后跟一个数字 是动态的吗 我想避免这种情况
  • Azure函数版本2.0-应用程序blobTrigger不工作

    我有一个工作功能应用程序 它有一个 blob 输入和一个事件中心输出 在测试版中工作 随着最新的更改 我的功能不再起作用 我尝试根据发行说明更新 host json 文件 但它没有引用 blob 触发器 version 2 0 extens

随机推荐

  • python和mysql中的矩阵乘法

    我有一本货币兑换字典 如下 exchange rates USD 1 00000 EUR 1 32875 GBP 1 56718 然后我使用以下方法检索产品的销售信息 SELECT price currency FROM sales 可能有
  • 在 Vaadin 视图中显示 PDF

    我想在 Vaadin 视图中显示 PDF 我创建一个 BrowserFrame 并传递 PDF 的 StreamResource StreamResource streamResource new StreamResource getPre
  • 使用Haskell的map函数计算列表的总和

    Haskell addm Int gt Int addm x xs sum x xs 我能够使用以下方法获得列表的总和sum函数 但是是否可以使用以下方法获得列表的总和map功能 还有地图功能有什么用 你不能真正使用map总结一个列表 因为
  • Java 能识别无限循环吗?

    给出以下代码示例 public class WeirdStuff public static int doSomething while true public static void main String args doSomethin
  • 具有相同 crs、范围、维度、分辨率的栅格不对齐

    我正在查找枫糖浆每年的平均生产天数 我的 Maple 分布数据位于 ascii 文件中 我有一个名为的栅格 从 NetCDF 文件创建 brick Tmax 我想要匹配的规格brick Tmax我的枫树分布数据 These are the
  • 在C中创建文件头(文件的元数据)

    文件头包含有关文件的所有数据 mdash 元数据 我想创建一个带有元数据的空白文件 然后我想将其他文件内容添加到这个空白文件中 并且需要更改 修改 元数据 C语言中有没有用于创建文件头的库 如何用C语言读取 写入文件头 metadata f
  • 在 Visual Studio 中调试 AngularJS(不是在 VS Code 中)

    有没有办法在 Visual Studio 中调试 AngularJS 代码 Note 我不是在谈论 VS Code 我希望能够设置断点并查看那里发生了什么 我知道其他 IDE 可以让我们做到这一点 那么可以使用 Visual Studio
  • 在写入文件之前格式化 JSON

    目前我正在使用杰克逊 JSON 处理器 https web archive org web 20150315020718 http jackson codehaus org 将首选项数据等写入文件主要是因为我希望高级用户能够修改 备份这些数
  • 使用随机整数创建 numpy 数组,每行具有另一个范围

    我需要制作快速的 numpy 数组 在每一行中生成具有不同范围的随机整数 我可以使用的代码 但当我将向量数量增加到 300000 时速度很慢 import numpy as np import random population size
  • ASP Net MVC - 验证消息的本地化

    我在我的 asp net mvc 5 应用程序中遇到了验证消息本地化的问题 我用它来本地化 路线配置 Internationalization public class RouteConfig public static void Regi
  • opencv中的“通道”到底指什么?

    我不明白 opencv 文档何时提到术语 通道 它是指数字图像中的通道吗 或者是别的东西 由于 OpenCV 是一个图像处理库 所以给定的图像可以假设为 2D 矩阵 每个元素作为一个像素 现在有多种类型的图像格式 例如Gray RGB or
  • BluetoothChat同步了Activity的onResume生命周期方法,为什么?

    我现在正在研究蓝牙 Android API 并且遇到了 BluetoothChat 示例 http developer android com resources samples BluetoothChat index html http
  • 包标识符在 iOS 项目中意味着什么?

    当我使用命令行工具模板时 它在向导内有一个包标识符 包标识符是什么意思 这和命名空间类似吗 根据苹果文档 https developer apple com go id bundle structure 捆绑包标识符可让 iOS 和 mac
  • 我应该将函数引用存储在 Redux 存储中吗?

    我正在尝试建立键盘快捷键支持进入我的 React Redux 应用程序惯用的 React Redux 方式 我计划执行此操作的方法是拥有以下操作创建者和关联操作 registerShortcut keyCode actionCreatorF
  • 在 prolog 中将浮点数转换为整数

    如何在prolog中将浮点数转换为整数 I tried integer truncate sqrt 9 false integer round sqrt 9 false 谓词integer 1你使用的是真的iff它的参数是一个整数 自任期以
  • 使整个单元格内容可点击 MUI 表格

    我有一个 MUI 表格 其中的单元格在单击时链接到应用程序的另一部分 我不是包裹整行 而是有选择地包裹某些单元格 链接 路由正在工作 但由于一些样式交互 我留下了这个令人讨厌的死的不可点击的空间 在下图中 我打开了开发工具上的 检查元素 视
  • 注册热键 Fn 修饰符?

    I know you can use CTRL ALT SHIFT etc modifiers for RegisterHotKey but what about the Fn key 我的笔记本电脑上曾经有一些过时的软件 当按下 Fn U
  • 为什么在 getdate() 上使用 left() 会将其更改为不同的数据类型?

    运行两个简单的选择语句 SELECT GETDATE SELECT LEFT GETDATE 10 Returns 2015 10 30 14 19 56 697 Oct 30 201 我正期待着LEFT 给我2015 10 30 但事实并
  • 从 XML 名称标签中删除无效字符 - RegEx C#

    我有一个包含从 Web 服务中提取的 xml 数据的字符串 数据很丑陋 并且 xml 的名称标签中存在一些无效字符 例如 我可能会看到类似的内容
  • 具有适用于左值和右值的引用参数的 C++ 函数

    我想要一个 C 函数 它接受一个参数 即一个引用 并且适用于左值和右值相同的语法 举个例子 include