是否有可能让getline()函数接受wistream&

时间:2009-08-21 17:29:43

标签: c++ getline

为了澄清,我指的是字符串类中的全局getline()函数。

我想做的是拥有这样的东西:

int main()
{
   wifstream in(L"textfile.txt");
   someFunc(in);
   return 0;
}


void someFunc(const wistream& read)
{
   wstring buff;

   while(getline(read, buff))
   {
      //do some processing here
   }
}

但我得到了:

Error   2   error C2664: 'std::getline' : cannot convert parameter 1 from 'const std::wistream' to 'std::basic_istream<_Elem,_Traits> &'

为了解决这个问题,我需要从const wistream&amp;中删除const。读。我理解为什么会发生这种情况但是可以配置getline()来接受wistream而不需要任何转换,或者我应该忽略它并删除co​​nst?

3 个答案:

答案 0 :(得分:4)

它接受一个wistream,但getline()需要一个非const参数,因为它修改了流。尝试将其更改为:

...
void someFunc(wistream& read)
...

答案 1 :(得分:3)

从流中读取字符会修改流。您无法标记流const并期望它能正常工作。

答案 2 :(得分:0)

根据经验,

  1. 我总是将函数参数作为const引用传递
  2. 除非它们是内置类型,否则会被复制(而const /非 - const会成为样式问题)
  3. 除非在函数内部更改它们以便更改反映在调用者的位置,然后通过非const引用传递
  4. 除非函数应该可调用,即使调用者没有要传递的对象,也会将它们作为指针传递(#1和#3也适用于此处)
  5. 然而,

    Streams是该规则的一个值得注意的例外,因为它们必须始终作为非const引用传递。