Pra*_*ari 6 c++ stack iostream stl ifstream
为什么以下不起作用:
#include <iostream>
#include <fstream>
#include <stack>
std::stack<std::ifstream> s;
Run Code Online (Sandbox Code Playgroud)
-PT
Tyl*_*nry 10
std::stack
(像所有STL容器一样)要求其包含的类型是"可分配的".在STL中,这意味着它必须有一个复制构造函数和一个operator=
.std::ifstream
没有这些.
您可以想象为什么您不希望能够复制和分配I/O流; 当有两个相同流的副本时应该发生什么的语义不明显.读取或写入一个副本是否会影响另一个副本的位置?关闭一个流关闭另一个流?等等
如果你想拥有" std::ifstream
s 的容器",那么你真正应该做的是" std::ifstream*
s 的容器".非常量指针总是可分配的.需要注意的是,在这种情况下,您必须确保在破坏容器之前自己删除指针,因为容器不会为您执行此操作.