【发布时间】:2019-10-08 19:38:45
【问题描述】:
考虑以下示例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 被传递给接受const A &a 的函数,即常量左值引用。这是否允许并导致 C++ 中定义明确的行为?
【问题讨论】:
-
类型为“右值引用”的变量的名称是左值,可以像其他所有左值一样使用。
-
@cpplearner 那么这是否意味着这是有效的?一秒钟前我在这里看到一条评论说“不”。
-
@HerpDerpington 我不确定您所说的“旨在按照它的方式工作”是什么意思。正如重复项中所解释的那样,您的代码在语法上和语义上是正确的,我认为很明显绑定引用的行为与所有其他引用的行为相同,因为重复项的答案没有提及其他任何内容。
标签: c++ move-semantics rvalue-reference