alf*_*lfC 5 c++ for-loop reference c++11
我有一些重复的代码,我从两个流中读取,
{
std::ifstream ifs("A.dat");
... code ...
}
{
std::ifstream ifs("B.dat");
... same code ...
}
Run Code Online (Sandbox Code Playgroud)
我想在一个循环中统一两者.第一反应是这样做:
for(auto ifs : {ifstream("A.dat"), ifstream("B.dat")})
{
... code ...
}
Run Code Online (Sandbox Code Playgroud)
但是它没有编译,因为类型不可复制,所以我尝试了这个:
for(auto& ifs : {ifstream("A.dat"), ifstream("B.dat")})
{
... code ...
}
Run Code Online (Sandbox Code Playgroud)
这是行不通的,因为ifs在循环内部是const.(a const ifstream不能使用.)这也不起作用,我想也是出于同样的原因:
for(auto&& ifs : {ifstream("A.dat"), ifstream("B.dat")})
Run Code Online (Sandbox Code Playgroud)
最后,我最终做到了这一点.
#include<iostream>
int main(){
for(auto& name : {"A.dat", "B.dat"})
{
std::ifstream ifs(name);
... code ...
}
Run Code Online (Sandbox Code Playgroud)
但我仍然很好奇是否有可能直接使用类似的类型std::ifstream?
std::ifstream streams[2];
streams[0].open("A.dat");
streams[1].open("B.dat");
for (auto &stream:streams)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)