Я хотел бы получить пояснение по этому конкретному случаю:
class Test
{
Test& operator=(const Test& copy)
{
...
}
Test() = default;
}
Test a;
Test b;
b = a; //Is "a" converted to an rvalue?
«a» является lvalue, однако теперь это правый операнд присваивания.Означает ли это, что он конвертируется в rvalue?
Этот код не компилируется:
class Test
{
Test& operator=(Test&& copy)
{
...
}
Test() = default;
}
Test a;
Test b;
a = b; //Error
Но этот код:
class Test
{
Test& operator=(Test& copy)
{
...
}
Test() = default;
}
Test a;
Test b;
a = b; //OK
Поскольку ссылка lvalueне может привязаться к r-значению, значит ли это, что здесь не происходит преобразование?Если это так, то когда происходит неявное преобразование lvalue в rvalue?(Кроме случая оператора + с примитивными типами)