0

只是为了澄清,我指的是字符串类中的全局 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& read 中删除 const。我理解为什么会发生这种情况,但是是否可以将 getline() 配置为接受 wistream 而无需任何转换,或者我应该忽略它并删除 const?

4

3 回答 3

4

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

...
void someFunc(wistream& read)
...
于 2009-08-21T17:39:21.567 回答
3

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

于 2009-08-21T17:41:26.273 回答
0

根据经验,

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

然而,流是该规则的一个显着例外,因为它们必须始终作为非const引用传递。

于 2009-08-21T17:47:48.757 回答