引用什么时候是转发引用,什么时候是右值引用?

2024-01-14

我知道转发引用是“对 cv 不合格模板参数的右值引用”,例如

template <class T> void foo(T&& );

这意味着上述函数可以同时采用左值和右值参考。

有一些我不明白的事情,例如

template <class T>
class A
{
    template <class U>
    void foo(T&& t, U&& u)
    {
        T t2( std::forward(t) ); // or should it be std::move(t)? is T&& forwarding or r-value reference
        U u2( std::forward(u) ); // or should it be std::move(u)? I believe U&& is forwarding reference
    }
};

在上面的代码中,都是T&& and U&&转发参考文献?

我写了一些代码来测试(VS2015编译器):

class A
{
public:
    A(){};
    A(const A& rhs)
    {
        std::cout << "calling 'const A&' l-value" << std::endl;
    }

    A(A&& rhs)
    {
        std::cout << "calling ' A&&' r-value" << std::endl;
    }

};

template <class T>
class Test
{
public:
    void test1(T&& t)
    {
        T t2(std::forward<T>(t));
    }

    template <typename X>
    void test2(X&& x)
    {
        T t2( std::forward<T>( x ) );
    }

};

void main()
{
    A a;
    Test<A> test;
    test.test1(A());
    test.test1(std::move(a));
    //test.test1(a); // this doesn't compile. error: cannot convert argument 1 from 'A' to 'A &&', You cannot bind an lvalue to an rvalue reference

    test.test2<A>(A());
    test.test2<A>( std::move( a ) );
    
    //test.test2<A>( a ); // this doesn't compile. error: cannot convert argument 1 from 'A' to 'A &&', You cannot bind an lvalue to an rvalue reference
}

我正期待着test.test1(a) and test.test2<A>(a)如果它们是转发引用,则两者都应该编译,但两者都没有。

有人可以向我解释一下吗?


这是一个几乎在一开始就困扰着每个人的好问题。

template <class T>
class A
{
    template <class U>
    void foo(T&& t, U&& u);
};

在这个例子中,T不扣除(您在实例化模板时显式定义它)。

U被推导出来,因为它是从论证中推导出来的u.

因此,在几乎所有情况下都会是:

std::move(t);
std::forward<U>(u);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

引用什么时候是转发引用,什么时候是右值引用? 的相关文章

  • 更新面板工作速度非常慢

    我正在编写一个用户可以注册的应用程序 注册时 可以选择多个选项 并根据这些注册字段可见或不可见以及是否必需 我想出了一个想法 所有字段都将位于 updatePanel 中 当用户更改注册选项时 我将在服务器端设置这些字段的可见性 它可以工作
  • 为什么这个 Web api 控制器不并发?

    我有一个 Web API 控制器 里面有以下方法 public string Tester Thread Sleep 2000 return OK 当我调用它 10 次 使用 Fiddler 时 我预计所有 10 次调用都会在大约 2 秒后
  • 使用 CMake 时如何导出 Emscripten 中的 C 函数

    In 本教程 https emscripten org docs porting connecting cpp and javascript Interacting with code html interacting with code
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • 转换 const void*

    我有一个函数返回一个const void 我想用它的信息作为char 我可以将它投射为 C 风格的罚款 char variable但是当我尝试使用reinterpret cast like reinterpret cast
  • 按扩展名过滤搜索文件返回太多结果

    我正在开发一个 C 控制台应用程序 它必须管理 Windows 操作系统上的文件 我需要获取具有特定扩展名的文件名 列表 我找到了很多解决方案 最建议的是以下一种 HANDLE hFind WIN32 FIND DATA data hFin
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • extern 声明和函数定义都在同一文件中

    我只是浏览了一下gcc源文件 在gcc c 我发现了类似的东西 extern int main int char int main int argc char argv 现在我的疑问是extern是告诉编译器特定的函数不在这个文件中 但可以
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 如何在 C# Designer.cs 代码中使用常量字符串?

    如何在 designer cs 文件中引用常量字符串 一个直接的答案是在我的 cs 文件中创建一个私有字符串变量 然后编辑 Designer cs 文件以使用此变量 而不是对字符串进行硬编码 但设计者不喜欢这样抛出错误 我明白为什么这行不通
  • 即使没有异步,CallContext.LogicalGetData 也会恢复。为什么?

    我注意到CallContext LogicalSetData LogicalGetData不按照我期望的方式工作 内部设置的值async方法得到恢复即使没有异步或任何类型的线程切换 无论如何 这是一个简单的例子 using System u
  • Eigen 和 OpenMP:由于错误共享和线程开销而没有并行化

    系统规格 Intel Xeon E7 v3 处理器 4 插槽 16 核 插槽 2 线程 核心 Eigen 系列和 C 的使用 以下是代码片段的串行实现 Eigen VectorXd get Row const int j const int
  • 在 C# 中检查 PowerShell 执行策略的最佳方法是什么?

    当你跑步时Get ExecutionPolicy在 PowerShell 中 它得到有效的执行政策 https learn microsoft com en us powershell module microsoft powershell
  • 是否使用 C# 数据集? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 C 中的数据集概念有点困惑 编码 ASP NET 站点 但这并不重要 在我的阅读中 我了解到它们 本质上 用作我的应用程序和我的
  • 在 .NET MAUI 中实现 TouchTracking

    我一直致力于将我们的应用程序从 Xamarin Forms 迁移到 NET MAUI 我们的应用程序几乎没有绘图功能 用户可以用手指进行绘图 我们用了TouchTrackingXamarin Forms 中的 nuget 包 但与 NET
  • 从 C# 使用 Odbc 调用 Oracle 包函数

    我在 Oracle 包中定义了一个函数 CREATE OR REPLACE PACKAGE BODY TESTUSER TESTPKG as FUNCTION testfunc n IN NUMBER RETURN NUMBER as be
  • 在 Win32 控制台应用程序中设置光标位置

    如何在 Win32 控制台应用程序中设置光标位置 最好 我想避免制作句柄并使用 Windows 控制台功能 我花了整个早上沿着那条黑暗的小巷跑 它产生的问题比它解决的问题还要多 我似乎记得当我在大学时使用 stdio 做这件事相对简单 但我
  • 如何在 sql azure 上运行 aspnet_regsql? [复制]

    这个问题在这里已经有答案了 可能的重复 将 ASP NET 成员资格数据库迁移到 SQL Azure https stackoverflow com questions 10140774 migrating asp net membersh
  • 无法将字符串文字分配给装箱的 std::string 向量

    这是我的类型系统的简化版本 include

随机推荐

  • 如何从联系人框架获取帐户名称

    我们知道iOS中的联系人可以从Google iCloud and Phone 好吧 我们可以使用以下方法获取一堆联系人Contacts framework 但我想知道它属于哪个帐户 我的意思是 我需要区分电子邮件和电话同步联系人 有什么办法
  • 使用 std::cin 初始化 const 变量有什么技巧吗?

    常见 std cin 用法 int X cin gt gt X 这样做的主要缺点是 X 不能const 很容易引入bug 我正在寻找一些技巧来创建一个 const 值 并只写入一次 天真的解决方案 Naive int X temp cin
  • Mamp 本地主机解析速度非常慢

    当我对 PHP WordPress 网站进行本地更改时 本地主机似乎在 20 30 分钟内没有更新 我使用的是 Mac OSX 10 8 4 并使用 MAMP Pro 我有两个网站 我为它们创建了单独的主机条目 我们称它们为mysite1
  • Windows shell:如何获取音频设备名称?

    我不确定这是否严格来说是一个编程问题 只要我 不介意使用额外的软件来解决问题 只要它保持可编写脚本或命令行即可 这是 非 GUI 解决方案 不管怎样 我已经发布了另一个 有点不同 问题超级用户 https superuser com que
  • 将字符串转换为整数十六进制值“奇怪”行为

    我注意到java不允许我存储大量数字 例如 2000000000 即 20 亿显然是整数类型 但如果我存储相应的十六进制值 即int largeHex 0x77359400 这可以 所以我的程序需要增加到 2 32 刚刚超过 42 亿 我测
  • WSO2 MDM iPhone 配置文件安装问题(无效的 DER 编码,未结束)

    我正在为 iPhone MDM 使用 WSO2 3 2 0 IOT 服务器 并按照网站中的说明安装它 我生成了 MDM APNS 证书 并将其添加到服务器上的 ios 配置中 在为 MDM 注册 iPhone iphone 6 时 我在 i
  • PyPI 包的可选依赖项

    我想创建一个新的PyPI https pypi org 包 但这将有一个特殊的轮子 我将像这样调用它 pip install misoftware customer1 这可能吗 如果是这样我怎样才能提供补丁 customer1 例如我的主要
  • 如何向 link_to 外部 URL 添加参数?

    在我的 显示用户 页面中 我想添加一个指向外部网站的链接 并将一些值保存在作为参数传递的表中 我的第一部分工作正常 这很简单 但我还想传递一些保存在数据库中的参数 例如 user email user first name etc 所以基本
  • BigQuery - 替换字符串中的空格

    我的头发在这里变白了 我有一个表 其中有一列我想删除其中的空格 预期结果 8 800 000 克朗 gt 8800000 克朗 我无法让它发挥作用 请参阅下面的查询输出 为什么空白没有被删除 当我对模拟数据执行查询时 它起作用 第一个示例中
  • bazel.rc 中的默认、特定于平台、Bazel 标志

    我想知道特定于平台的默认 Bazel 构建标志是否可能 例如 我们想使用 workspace status command但这必须是 Linux 上的 shell 脚本 并且必须指向 Windows 上的批处理脚本 有没有一种方法可以让我们
  • 如何使用 Java 中的 Log4j 逐步配置 jboss 6.x 中的日志记录

    大家好 我是 Jboss 的新手 所以我在 Jboss 6 1 中设置日志记录时感到困惑 我做了什么 我已经下载并解压了 Jboss jboss eap 6 1 在我的机器上然后我按照中给出的步骤操作this http www master
  • 无 DOM、静态类型、提前编译的 JavaScript 代码与本机代码的性能相比如何?

    为什么 Javascript 比本机代码慢 的传统答案是 因为它被解释了 这种说法的问题在于解释并不是语言本身的品质 事实上 现在大多数 Javascript 代码都经过 JIT 处理 但这还远未接近本机速度 如果我们从方程中删除解释因素并
  • 在不登录的情况下在AWS EC2实例上部署docker容器

    我是微服务的初学者 今天花了几个小时研究 AWS 最微小的痛苦事情 非常感谢任何专家的建议 因为我怀疑下一步很小 但可能需要几个小时才能解决 所以我部署了一个 Nano 实例ssh进去 不得不实际重做它来修复安全组 但无论如何它最终起作用了
  • ASP.NET Core WebApi

    我正在尝试使用新的 NET Core 制作一个 Web api 但使用时遇到一些麻烦 HttpPost 当我使用邮递员时 它不会返回任何内容 另外 当我在返回线上放置断点时 它永远不会被命中 这是我在控制器中的方法 POST api val
  • 从嵌套列表中提取然后 row.bind data.frames

    我有一个输出大矩阵 Mat1 和小数据帧 Smalldf1 的函数 我将它们存储在名为 Result 的列表中 该函数在循环内运行 因此我创建了 结果 列表的许多版本 直到循环结束 每次我将它们添加到名为 FINAL 的列表中时 在循环结束
  • 如何通过 Django 在视图中获取上传的文本文件?

    我现在正在制作网络应用程序 该应用程序获取具有未组织数据的文本文件并对其进行组织 我现在在Python3中使用Django 我已经在模板中制作了表单数据 Teplates gt
  • 启动前检查 .NET 依赖项

    我有几个正在开发的应用程序 并且喜欢将其分发给需要 Microsoft 提供的 dll 和 或框架的朋友 具体来说 XNA 我厌倦了从他们那里收到说 它崩溃了 的电子邮件 而实际上 发生的只是他们没有安装 XNA 或 NET 3 5 或其他
  • 如何使用完全独立的 .NET 4.0 安装程序制作 WiX 3.5 安装程序?

    继续上一个问题我在这里问 https stackoverflow com questions 1128734 how do i make a wix installer with a completely self contained ne
  • 使用嵌套属性“无法批量分配受保护属性”

    我见过与此问题相关的其他问题 但到目前为止 答案对我不起作用 我正在尝试创建一个注册用户并同时创建组织的表单 用户和组织通过分配表关联 这是我的表格 form for resource as gt resource name url gt
  • 引用什么时候是转发引用,什么时候是右值引用?

    我知道转发引用是 对 cv 不合格模板参数的右值引用 例如 template