繁体   English   中英

将右值传递给函数

[英]Passing an rvalue to a function

我阅读了很多关于右值链接的信息,我什么都懂,但是我遇到了这个例子:

template<class T, class Arg>
T* make_raw_ptr(Arg &&arg)
{
    return new T(arg);
}; 

如果将右值传递给make_raw_ptr函数而不使用 my_forward 函数,则在使用 new T 时,将有一个复制构造函数,而不是移动构造函数。 我知道arg将是左值,尽管它是一个右值引用,但我有一个问题。 为什么在已经是右值链接时将static_cast arg设置为右值链接,而在使用static_cast<A&&>到 arg 时,将调用移动构造函数?

arg本身是一个表达式,表示由arg引用的对象,其值类别是lvalue arg的类型实际上是什么并不重要。 变量/函数参数本身的名称始终是左值表达式。

static_cast<A&&>(arg)是表示与arg完全相同的对象的表达式,但它的类别是rvalue (和xvalue )。 当您将此表达式用作构造函数参数时,将首选移动构造函数。 std::move(arg)也有同样的效果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM