Namespaces
Variants

std::basic_ostream<CharT,Traits>:: operator=

From cppreference.net
protected :
basic_ostream & operator = ( const basic_ostream & rhs ) = delete ;
(1)
protected :
basic_ostream & operator = ( basic_ostream && rhs ) ;
(2) (自 C++11 起)
1) 复制赋值运算符受保护且被删除。输出流不满足 CopyAssignable 要求。
2) 移动赋值运算符交换基类的所有数据成员(除 rdbuf() 外)与 rhs ,如同通过调用 swap ( * rhs ) 实现。此移动赋值运算符受保护:仅由派生可移动输出流类 std::basic_ofstream std::basic_ostringstream 的移动赋值运算符调用,这些派生类知晓如何正确移动赋值关联的流缓冲区。

参数

rhs - 用于向 * this 赋值的 basic_ostream 对象

示例

#include <iostream>
#include <sstream>
#include <utility>
int main()
{
    std::ostringstream s;
//  std::cout = s;            // 错误:拷贝赋值运算符已被删除
//  std::cout = std::move(s); // 错误:移动赋值运算符受保护
    s = std::move(std::ostringstream() << 42); // 正确:通过派生类进行移动
    std::cout << s.str() << '\n';
}

输出:

42

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的C++标准。

td>1. 重载 (1) 的参数类型为 basic_ostream&
2. 重载 (2) 的参数类型为 const basic_ostream &&
缺陷报告 应用于 发布时行为 正确行为
LWG 2067 C++11 1. 添加 const
2. 移除 const