int main()
{
std::stringstream s1("This is my string.");
std::stringstream s2 = s1; // error, copying not allowed
}
Run Code Online (Sandbox Code Playgroud)
我找不到为什么我不能复制stringstream的原因.你能提供一些参考吗?
Naw*_*waz 79
通过创建复制构造函数来禁用在C++中复制任何流private
.
任何方式提供任何,无论是stringstream
,istream
,ostream
,iostream
或什么的.
流的复制被禁用,因为它没有意义.了解流意味着什么非常非常重要,要真正理解为什么复制流没有意义.stream
不是您可以复制的容器.它不包含数据.
如果列表/向量/映射或任何容器是存储桶,则流是数据流经的软管.将流视为一些管道,您可以通过它获取数据; 管道 - 一侧是源(发送器),另一侧是接收器(接收器).这称为单向流.还有双向流,数据在这两个方向上流动.那么制作这样的东西有什么意义呢?它根本不包含任何数据.您可以通过它获取数据.
如果使流的副本被允许现在,假设一段时间,并创建一个副本的std::cin
这实际上是输入流.说复制的对象是copy_cin
.现在问问自己:从copy_cin
已经从std::cin.
No 读取相同数据时从流中读取数据是否有意义,这没有意义,因为用户只输入一次数据,生成键盘(或输入设备)电信号只有一次,它们只流过所有其他硬件和低级API.您的程序如何读取两次或更多次?
因此,不允许创建副本,但允许创建引用:
std::istream copy_cin = std::cin; //error
std::istream & ref_cin = std::cin; //ok
Run Code Online (Sandbox Code Playgroud)
另请注意,您可以创建另一个流实例,并使其可以使用旧流当前使用的相同底层缓冲区.请看:https://ideone.com/rijov
要直接回答这个问题,您不能复制,因为 stringstream 类的复制构造函数被声明为私有。
它可能是这样声明的,因为在大多数情况下复制流似乎很尴尬,因此没有一个流类具有公共复制构造函数。