为什么basic_string :: assign没有r值重载?

时间:2015-10-12 05:12:53

标签: c++ c++11 stdstring rvalue

根据this,assign没有r值重载。我期待的那种功能签名是:

basic_string::assign(basic_string::basic_string &&param);

我检查了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

是否因为这种情况很少见?或者是否存在任何包含过载的设计缺陷。

1 个答案:

答案 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。