【问题标题】:Why does basic_string::assign not have a r-value overload? [closed]为什么 basic_string::assign 没有右值重载? [关闭]
【发布时间】:2015-10-12 05:12:53
【问题描述】:

根据this assign 没有右值重载。我期待的函数签名是:

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

是因为这种用例很少见吗?或者是否存在任何设计缺陷来包含重载。

【问题讨论】:

  • 你可以简单地final = std::move(temp);
  • 正如 Cubbi 在 cppreference 上所说:有basic_string& assign( basic_string&& str );

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


【解决方案1】:

您链接的同一页面确实显示了您正在寻找的超载:

basic_string& assign( basic_string&& str );

4) 使用移动语义将内容替换为 str 的内容。字符串 操作后处于未定义状态。

其次,考虑到它已记录在 MSDN 上,您声称它未在 MSVC 中实现(截至 2013 年)是可疑的。

basic_string(
    basic_string&& _Right
);

没有 Visual Studio 2014,但是有“14”CTP,它不适用于生产环境。 Visual Studio 2015 是 14.0 版。实际编译器编号为 19.00。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 2014-03-22
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多