Почему C++11 имеет неявные перемещения для параметров-значений, но не для параметров-значений?

В C++11 параметры значения (и другие значения) имеют неявное перемещение при возврате:

A func(A a) {
    return a; // uses A::A(A&&) if it exists
}

По крайней мере, в MSVC 2010, параметры ссылки на rvalue должны std::move:

A func(A && a) {
    return a; // uses A::A(A const&) even if A::A(A&&) exists
}

Я бы предположил, что внутри функций ссылка на rvalue и значение ведут себя одинаково, с той лишь разницей, что в случае значений за уничтожение отвечает сама функция, а для ссылок rvalue ответственность снаружи.

В чем причина того, что стандарт рассматривает их по-разному?

21
задан David Stone 19 October 2019 в 01:04
поделиться