【发布时间】:2013-06-25 16:26:05
【问题描述】:
假设我有:
template<class T>
struct NodeBase
{
T value;
NodeBase(T &&value)
: value(value) { }
};
我继承了它:
template<class T>
struct Node : public NodeBase<T>
{
Node(T &&value)
: NodeBase( WHAT_GOES_HERE (value)) { }
};
WHAT_GOES_HERE 应该是 std::move 还是 std::forward<T>?为什么?
【问题讨论】:
-
我必须停下来想一想才能确定我脑海中的答案。
-
哈哈!由于所有答案都已删除,我们discovered that the constructor is doing reference collapsing,您可以将左值引用传递给它。
-
引用折叠很简单:
typedef int& T; T&& x;, tadah -
@Mehrdad 你想要什么行为?你不能在那里放任何东西,这会导致 some 行为。
Node<T&>是什么意思,你希望从什么样的对象中构造它?Node<T&&>、Node<T>、Node<T const&>和Node<T const&&>怎么样? -
@MooingDuck 当然:通用引用不需要类型推断上下文。在类型推断上下文之外,它们只是相对无用!在类型推导/完美转发的上下文中,你想要的行为是比较明显的:在这里,它就不那么明显了。
标签: c++ c++11 move-semantics rvalue-reference