我正在使用C ++ 11。
std::ifstream
继承自std::istream
,所以它理论上应该能够完成所有相同的事情,但似乎并非如此。
我可以用两种方式定义相同的功能:
void parse(std::ifstream &file) {
for (std::string word; file >> word; );
}
void parse(std::istream &file) {
for (std::string word; file >> word; );
}
使用istream
时,没有错误。
当我使用ifstream
时,g ++和clang ++都会返回此错误(略有不同):
error: invalid operands to binary expression ('std::ifstream' (aka 'basic_ifstream<char>') and 'std::string' (aka 'basic_string<char>'))
for (std::string word; file >> word; ) {
~~~~ ^ ~~~~
我可以使用istream&
并使用多态传递ifstream&
,但我不愿意,我想知道为什么会发生这种情况。