问题标签 [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.
c++ - 如何对可变参数函数中的所有参数调用 std::forward ?
我只是在编写一个通用对象工厂并使用 boost 预处理器元库来制作一个可变参数模板(使用 2010 并且它不支持它们)。我的函数使用 rval 引用并std::forward
进行完美转发,这让我开始思考……当 C++0X 出现并且我有一个标准编译器时,我会使用真正的可变参数模板来做到这一点。但是,我会如何呼吁std::forward
论点?
我能想到的唯一方法是需要手动解包 ...params ,我也还没到那里。有没有更快的语法可以工作?
c++ - 使用 std::forward 的主要目的是什么以及它解决了哪些问题?
在完美转发中,std::forward
用于将命名的右值引用转换为t1
未命名的t2
右值引用。这样做的目的是什么?inner
如果我们将t1
&作为左值,这将如何影响被调用的函数t2
?
c++ - 继承构造函数在 C++ 中有多大用处?
当我参加 C++ 标准委员会会议时,他们正在讨论放弃继承构造函数的利弊,因为还没有编译器供应商实现它(感觉用户并没有要求它)。
让我快速提醒大家什么是继承构造函数:
一些供应商建议使用右值引用和可变参数模板(完美的转发构造函数),在继承类中提供转发构造函数来避免继承构造函数是微不足道的。
例如:
我有两个问题:
1)您能否从您的编程经验中提供真实世界(非人为)的示例,这些示例将从继承构造函数中受益匪浅?
2)您能想到哪些技术原因会阻止“完美的转发构造函数”成为适当的替代方案?
谢谢!
c++ - 为什么 std::forward 会丢弃 constexpr-ness?
未声明constexpr
,std::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::forward
not being是为什么不能通过用右值调用它的 cstr 来创建constexpr
的技术原因,但这里的这个问题显然(更)更普遍。std::tuple
c++ - C++11 中的 T&&(双 & 符号)是什么意思?
我一直在研究 C++11 的一些新特性,其中一个我注意到的是声明变量时的双 & 符号,比如T&& var
.
首先,这个野兽叫什么?我希望谷歌允许我们搜索这样的标点符号。
它到底是什么意思?
乍一看,它似乎是一个双重引用(如 C 风格的双指针T** var
),但我很难想到一个用例。
c++ - 使用 decltype 作为尾随返回类型的正确方法
我经常看到这种形式的例子:
但我敢说这是更好更正确的方法:
为什么?首先,这个例子中的 decltype 只需要推导出返回类型,所以 (t + u) 是返回类型而不是 (std::forward(t) + std::forward(u)),两个 ver 生成的第二个代码是同样,第三个 decltype(u + t) 更直接,并且准确地表达了程序员的意图,而没有带出实现的“胆量”。
你对这个话题有什么看法?
c++ - 完美转发是如何工作的?
可能重复:
使用 forward 的优点
完美转发的想法是将模板中的确切 CV 限定符转发到其他模板。
但是,它使用 RValue-references 功能,这意味着它不能绑定到命名变量。(我认为?)
如果它不能绑定到命名变量,那么转发如何“完美”?
c++11 - 实现具有 const 正确性的可变参数 zip 函数
我正在尝试实现一个zip
功能。 zip
的参数是 each wrapped<Ti>
,其中Ti
因参数而异。
zip
接受这些wrapped<Ti>
s 并产生一个wrapped<tuple<T1&,T2&,...TN&>>
,或者换句话说,一个包装tuple
了对其参数的引用。引用应保留const
-ness。
这是我第一次尝试zip
使用一个参数,但通常不起作用:
有没有办法用单一版本的zip
?
c++ - 这段代码合法吗?(C++0x 移动语义)
我很好奇这段代码在 C++0x 中是否合法。具体来说,函数中声明的对象move_it()
是否会正确移动到 中声明的对象main()
?
c++11 - 完美的转发 - 这是怎么回事?
可能重复:
使用 forward 的优点
有人可以向我解释一下完美转发是什么吗?