问题标签 [perfect-forwarding]

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 回答
50319 浏览

c++ - 如何对可变参数函数中的所有参数调用 std::forward ?

我只是在编写一个通用对象工厂并使用 boost 预处理器元库来制作一个可变参数模板(使用 2010 并且它不支持它们)。我的函数使用 rval 引用并std::forward进行完美转发,这让我开始思考……当 C++0X 出现并且我有一个标准编译器时,我会使用真正的可变参数模板来做到这一点。但是,我会如何呼吁std::forward论点?

我能想到的唯一方法是需要手动解包 ...params ,我也还没到那里。有没有更快的语法可以工作?

0 投票
7 回答
92505 浏览

c++ - 使用 std::forward 的主要目的是什么以及它解决了哪些问题?

在完美转发中,std::forward用于将命名的右值引用转换为t1未命名的t2右值引用。这样做的目的是什么?inner如果我们将t1&作为左值,这将如何影响被调用的函数t2

0 投票
5 回答
1717 浏览

c++ - 继承构造函数在 C++ 中有多大用处?

当我参加 C++ 标准委员会会议时,他们正在讨论放弃继承构造函数的利弊,因为还没有编译器供应商实现它(感觉用户并没有要求它)。

让我快速提醒大家什么是继承构造函数:

一些供应商建议使用右值引用和可变参数模板(完美的转发构造函数),在继承类中提供转发构造函数来避免继承构造函数是微不足道的。

例如:

我有两个问题:

1)您能否从您的编程经验中提供真实世界(非人为)的示例,这些示例将从继承构造函数中受益匪浅?

2)您能想到哪些技术原因会阻止“完美的转发构造函数”成为适当的替代方案?

谢谢!

0 投票
1 回答
1352 浏览

c++ - 为什么 std::forward 会丢弃 constexpr-ness?

未声明constexprstd::forward将丢弃将参数转发到的任何函数的 constexpr-ness。为什么std::forward不声明constexpr自己,以便它可以保留 constexpr-ness?

示例:(使用 g++ snapshot-2011-02-19 测试)

注意:从技术上讲,制作 constexpr 很容易std::forward,例如,像这样(请注意,在 gstd::forward中已替换为fix::forward):

我的问题是:为什么std::forward不定义 like fix::forward

注意2:这个问题与我关于 constexpr std::tuple的另一个问题有些相关,因为std::forwardnot being是为什么不能通过用右值调用它的 cstr 来创建constexpr的技术原因,但这里的这个问题显然(更)更普遍。std::tuple

0 投票
4 回答
271171 浏览

c++ - C++11 中的 T&&(双 & 符号)是什么意思?

我一直在研究 C++11 的一些新特性,其中一个我注意到的是声明变量时的双 & 符号,比如T&& var.

首先,这个野兽叫什么?我希望谷歌允许我们搜索这样的标点符号。

它到底是什么意思?

乍一看,它似乎是一个双重引用(如 C 风格的双指针T** var),但我很难想到一个用例。

0 投票
3 回答
1562 浏览

c++ - 使用 decltype 作为尾随返回类型的正确方法

我经常看到这种形式的例子:

但我敢说这是更好更正确的方法:

为什么?首先,这个例子中的 decltype 只需要推导出返回类型,所以 (t + u) 是返回类型而不是 (std::forward(t) + std::forward(u)),两个 ver 生成的第二个代码是同样,第三个 decltype(u + t) 更直接,并且准确地表达了程序员的意图,而没有带出实现的“胆量”。

你对这个话题有什么看法?

0 投票
0 回答
169 浏览

c++ - 完美转发是如何工作的?

可能重复:
使用 forward 的优点

完美转发的想法是将模板中的确切 CV 限定符转发到其他模板。

但是,它使用 RValue-references 功能,这意味着它不能绑定到命名变量。(我认为?)

如果它不能绑定到命名变量,那么转发如何“完美”?

0 投票
3 回答
537 浏览

c++11 - 实现具有 const 正确性的可变参数 zip 函数

我正在尝试实现一个zip功能。 zip的参数是 each wrapped<Ti>,其中Ti因参数而异。

zip接受这些wrapped<Ti>s 并产生一个wrapped<tuple<T1&,T2&,...TN&>>,或者换句话说,一个包装tuple了对其参数的引用。引用应保留const-ness。

这是我第一次尝试zip使用一个参数,但通常不起作用:

有没有办法用单一版本的zip?

0 投票
3 回答
297 浏览

c++ - 这段代码合法吗?(C++0x 移动语义)

我很好奇这段代码在 C++0x 中是否合法。具体来说,函数中声明的对象move_it()是否会正确移动到 中声明的对象main()

0 投票
2 回答
52076 浏览

c++11 - 完美的转发 - 这是怎么回事?

可能重复:
使用 forward 的优点

有人可以向我解释一下完美转发是什么吗?