为什么 basic_string::assign 没有 r 值超载?
Why does basic_string::assign not have a r-value overload?
根据 this assign 没有右值重载。我期望的函数签名类型是:
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
是不是因为这个用例很少?或者是否存在任何设计缺陷以包含过载。
您链接的同一页面确实显示了您正在寻找的过载:
basic_string& assign( basic_string&& str );
4) Replaces the contents with those of str using move semantics. str
is in undefined state after the operation.
其次,考虑到它已在 MSDN.
上记录,您声称它未在 MSVC 中实现(截至 2013 年)是可疑的
basic_string(
basic_string&& _Right
);
没有 Visual Studio 2014,但是有“14”CTP,不适用于生产环境。 Visual Studio2015年是14.0版本。实际编译号为19.00.
根据 this assign 没有右值重载。我期望的函数签名类型是:
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
是不是因为这个用例很少?或者是否存在任何设计缺陷以包含过载。
您链接的同一页面确实显示了您正在寻找的过载:
basic_string& assign( basic_string&& str );
4) Replaces the contents with those of str using move semantics. str is in undefined state after the operation.
其次,考虑到它已在 MSDN.
上记录,您声称它未在 MSVC 中实现(截至 2013 年)是可疑的basic_string(
basic_string&& _Right
);
没有 Visual Studio 2014,但是有“14”CTP,不适用于生产环境。 Visual Studio2015年是14.0版本。实际编译号为19.00.