考虑以下示例struct
:
struct A {
int i;
void init(const A &a)
{
this->i = a.i;
}
A(int i)
{
this->i = i;
}
A(const A &a) = delete;
A &operator=(const A &a) = delete;
A(A &&a)
{
init(a); // Is this allowed?
}
A &operator=(A &&a)
{
init(a); // Is this allowed?
return *this;
}
};
右值引用A &&a
被传递到接受a的函数const A &a
,即恒定的左值引用。是否允许这样做并导致C ++中行为明确?
是的,允许。
请注意,a
即使a
的声明类型是rvalue引用,表达式的值类别也是lvalue 。
此外,如果您通过a
with创建一个右值std::move
,则您的代码仍会格式正确,因为右值可以绑定到const左值引用:
init(std::move(a)); // std::move(a) is an rvalue (to be precise, xvalue), but still OK
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句