В соответствии с this присваивание не имеет перегрузки по r-значению. Вид функции подписи я ожидал это:Почему basic_string :: assign не имеет перегрузки r-значения?
basic_string::assign(basic_string::basic_string &¶m);
Я проверил реализацию MSVC-2014 и реализацию CGI, который не обеспечивает эту перегрузку. Очевидным преимуществом этого было бы в таких случаях, как
string final;
while(true){
string tmp;
// do some operation on tmp
if (ConditionSatisfied){
final.assign(move(tmp));
break;
}
}
// do further operations on final
Это потому, что случаи использования этого были бы редкими? Или есть какой-либо недостаток дизайна, который включает перегрузку.
Вы можете просто 'final = std :: move (temp);'. – Lingxi
Как сказал Cubbi на cppreference: существует 'basic_string & assign (basic_string && str);' – dyp