C++ R值引用和标准::使_唯一

C++ R值引用和标准::使_唯一,c++,C++,假设我有一个类Foo的初始化对象Foo\u obj,并希望创建一个指向此对象副本的唯一智能指针。代码auto pointer=make_unique(Foo_obj)执行并执行此操作。但是,当查看forstd::make_unique时,它只接受R值引用作为参数,并使用这些参数调用相应类的构造函数 我的理解是像Foo_obj这样的对象是l值,因此上面的代码不应该编译。我遗漏了什么?当你有像template void foo(T&&rt){…}这样的东西时,会发生一种叫做引用折叠的事情,这就是Me

假设我有一个类
Foo
的初始化对象
Foo\u obj
,并希望创建一个指向此对象副本的唯一智能指针。代码
auto pointer=make_unique(Foo_obj)
执行并执行此操作。但是,当查看for
std::make_unique
时,它只接受R值引用作为参数,并使用这些参数调用相应类的构造函数


我的理解是像
Foo_obj
这样的对象是l值,因此上面的代码不应该编译。我遗漏了什么?

当你有像
template void foo(T&&rt){…}
这样的东西时,会发生一种叫做引用折叠的事情,这就是Meyers所说的“通用引用”。简而言之,如果传递右值,这将成为右值引用,如果传递左值,这将成为左值引用。这样,函数将所有参数完美地转发给
unique\u ptr
的构造函数

在该男子自己的博客文章中了解更多有关通用参考资料的信息。

它们是“通用参考资料”。这可能会有所帮助