我有一些重复的代码,其中我从两个流中读取,
{
std::ifstream ifs("A.dat");
... code ...
}
{
std::ifstream ifs("B.dat");
... same code ...
}
我想在一个循环中统一两者。 第一 react 是这样做:
for(auto ifs : {ifstream("A.dat"), ifstream("B.dat")})
{
... code ...
}
但是它不编译,因为类型不可复制,所以我试了这个:
for(auto& ifs : {ifstream("A.dat"), ifstream("B.dat")})
{
... code ...
}
这不起作用,因为循环内的 ifs
是 const
。 (不能使用 const ifstream
。)
这也不起作用,我认为出于同样的原因:
for(auto&& ifs : {ifstream("A.dat"), ifstream("B.dat")})
当然,最后我最终还是这样做了。
#include<iostream>
int main(){
for(auto& name : {"A.dat", "B.dat"})
{
std::ifstream ifs(name);
... code ...
}
但我仍然很好奇是否可以直接使用类似 std::ifstream
的类型进行范围 for 循环?
最佳答案
std::ifstream streams[2];
streams[0].open("A.dat");
streams[1].open("B.dat");
for (auto &stream:streams)
{
// ...
}
关于c++ - 对于不可复制类型的范围循环,是否可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37198986/