c++ - 对于不可复制类型的范围循环,是否可能?

标签 c++ c++11 for-loop reference

我有一些重复的代码,其中我从两个流中读取,

{
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 ...
}

这不起作用,因为循环内的 ifsconst。 (不能使用 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/

相关文章:

c++ - 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上?

c++ - 哪些 C 结构出现在 std 命名空间中?

javascript - 为什么以及何时 for 循环忽略 html 集合中的某些项目

c++ - 在应用程序中包含正确的 C++ redist

c++ - 这个 for 循环会在每次迭代时调用 set.size() 吗(set 是一个 vector )?

c++ - 不同编译器中的 std::filesystem 和 std::experimental::filesystem 问题

r - 从列表中子集 n 个元素

javascript - "for ... in"循环 JavaScript - 它是否包含符号属性

c++ - std::set 使用初始化列表插入

c++11可变参数模板方法完全影子基类方法?