根据this,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
是否因为这种情况很少见?或者是否存在任何包含过载的设计缺陷。
答案 0 :(得分:1)
您链接的同一页面确实显示了您正在寻找的超载:
basic_string& assign( basic_string&& str );
4)使用移动语义替换str的内容。海峡 手术后处于未定义状态。
其次,你认为它没有在MSVC中实现(截至2013年)是可疑的,考虑到它已记录在MSDN上。
basic_string(
basic_string&& _Right
);
没有Visual Studio 2014,但是有“14”CTP,这不适用于生产环境。 Visual Studio 2015是14.0版。实际的编译器编号是19.00。