问题标签 [forwarding-reference]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
6988 浏览

c++ - 使用invoke_result的正确方法?

cppreference上,写着正确的使用方法std::result_of是:

我想知道std::invoke_result_t应该如何使用 invoke_result_t::

或者:

0 投票
1 回答
69 浏览

c++11 - 是否将prvalue移动到函数模板uref参数中?

我的问题是将 std::move (或不) prvalue 放入一个包罗万象的函数模板中是否有意义,该模板相应地在其签名中采用通用引用 T&& 。另外我想知道复制移动省略/RVO 是否在这个决定中发挥了作用。

问题:引用折叠是否会导致使用 T&&(右值引用)调用带有或不带 std::move 的 foo 并且 RVO 对此有任何影响(或对 RVO 有影响)吗?

提前感谢山姆

0 投票
1 回答
179 浏览

c++ - 为什么通用引用和右值引用的流程不同

从 Efficient Modern C++ 开始工作,第 25 条。我们有一个例子

情况1

案例2

通话

现在假设情况 1,该书指出文字被传送到 w 的 name 数据成员内的 t std::string 的赋值运算符。

假设情况 2,这本书指出 -> 首先从文字创建一个临时,调用字符串构造函数,因此 setName 参数可以绑定到它,然后这个临时被移动到 w 的 name 数据成员中。

问题

为什么会出现这种行为差异,我该如何思考?

即,为什么在案例 1 中不需要临时的?为什么有区别?T&& 是否被推断为对字符串的右值引用,从而达到与案例 2 相同的行为(显然不是,根据书,但为什么)?

0 投票
2 回答
692 浏览

cuda - 使用 API 调用启动与三人字形语法有什么区别?

考虑以下两个函数模板:

和:

由Sean Parent定义for_each_argument

问题:

  • foo和的语义是否bar完全相同?
  • 使用其中一个有什么好处吗?(例如,也许第一种形式在引擎盖下进行堆分配或其他东西......)
  • 在第二个函数中使用转发引用是个好主意吗?两个功能?
0 投票
2 回答
287 浏览

c++ - 推断出通用引用和成员指针的冲突类型

我想要这样的功能:

参数是(因为 C/C++ 类型语法是心理的):

  • 对类的通用引用,例如MyClass.
  • 指向其成员函数的 const 指针MyClass采用 unsigned int 并返回T

这种工作,但是如果我用左值引用作为第一个参数调用它,我会收到如下错误:

候选模板被忽略:推断参数“C”的冲突类型(“MyClass &”与“MyClass”)

据我了解,它是C从第一个参数和第二个参数推导出来的,但是得出了不同的推导并感到困惑。

根据这个答案,你可以让它只对第一个参数进行推导,并以某种方式typename在第二个参数上使用关键字。T但是当我确实希望它推断出参数 ( ) 中的一种类型而不是另一种 ( )时,我无法计算出执行此操作的语法C

这个答案也很有帮助,但他们通过根本不使用引用来解决它C在这种情况下,这同样有效,但不是我的。

这可能吗?

0 投票
0 回答
37 浏览

c++ - std::forward() 是否总是在模板函数中使用?

谁能给我一个显示对 std::forward() 的显式调用的非模板函数定义?

我猜 forward() 的参数总是(?)一个通用参考。通用引用可以声明为“自动”,例如

有了这个 var2,非模板函数可以做:

0 投票
0 回答
35 浏览

c++ - 具有通用参考的写作模板

我有以下代码:

如您所见,此代码应为我的模板类重载 operator>>。但我希望我的运算符同时使用 L 值和 R 值作为参数。当我写splitter::splitter_class<Tlist...>& splitter它时它不接受 R 值,但是当我尝试splitter::splitter_class<Tlist...>&& splitter它时它只接受 R 值。我知道有一个通用引用的概念,但我不知道如何修改这个函数来接受 L 值和 R 值引用。你愿意帮助我吗?

感谢您的时间。

0 投票
1 回答
459 浏览

c++ - 结构化绑定和转发引用混合得好吗?

我知道我能做到

并且根据const的返回值的好坏something,我会为bla.

这是否也适用于结构化绑定情况,例如

我猜是这样(结构化绑定搭载在auto初始化程序上,其行为如下),但我找不到明确的肯定。

更新:初步测试似乎符合我的预期(const正确推导):

现场演示auto&&,如果正在做它的工作,会出现我所期望的错误:

我仍然想确切地知道这种行为是在哪里指定的。

注意:使用“转发引用”来表示这种行为可能会延长它,但我没有一个好名字来给出const扣除部分auto&&(或模板T&&-就此而言)。

0 投票
2 回答
59 浏览

c++ - 完美转发函数推导出冲突错误

我正在测试完美转发,我不明白为什么TEST_EQ(string("olleH"), s)编译失败,但string("olleH") == s编译通过。如何TEST_EQ在这里修复我的功能?

0 投票
1 回答
613 浏览

c++ - 为什么右值引用类型的模板参数可以绑定到左值类型?

据我所知,右值引用不能绑定到左值。例如,

编译器抱怨:错误:无法将 'Foo&&' 类型的右值引用绑定到 'Foo 类型的左值

但是,为什么右值引用类型的模板参数可以绑定到左值?例如,

编译器不会抱怨错误。为什么?