C++ C++;引用变量上的运算符,这是做什么的?

C++ C++;引用变量上的运算符,这是做什么的?,c++,C++,我遇到了一个类,其中有一个成员var作为引用(指向std::istream),还有操作符void*()和bool操作符!()返回那个引用,我想知道那是为了什么。该类与使用config param对读取/解析文本文件相关。我已经从这个(大得多的)项目中抽出了基本部分。在qt(MSVC 2015社区工具链)中,我不得不更改操作符void*()以获得编译,但在原始linux系统上似乎还可以 (在我的桌面环境中,我得到:“error:C2440:'return':无法从'std::istream'转换为

我遇到了一个类,其中有一个成员var作为引用(指向std::istream),还有操作符void*()和bool操作符!()返回那个引用,我想知道那是为了什么。该类与使用config param对读取/解析文本文件相关。我已经从这个(大得多的)项目中抽出了基本部分。在qt(MSVC 2015社区工具链)中,我不得不更改
操作符void*()
以获得编译,但在原始linux系统上似乎还可以

(在我的桌面环境中,我得到:“error:C2440:'return':无法从'std::istream'转换为'void*'”,因此我替换为调用
if(m_In.eof())
return nullptr

以及使用此函数的类:

class CR { // config reader
public:
  // .... other stuff
  void Load_Variable(const std::string &section, value, etc...);
private:
  LR m_reader;
};
void CR::Load_Variable(const std::string &section, value, etc.) {
  string line;
  bool found = false;
  while (m_reader >> line)
  {
    // .... check stuff, etc.
  }
}
在Qt中调试,
while(mu reader>>行)
调用操作符void*()。
我的问题:
为什么像这样对
std::istream
使用成员变量引用?
在中返回成员var
&m_地址的目的是什么?因为它是成员var(或者这不是真的?)
读卡器的
操作符*()
是否会返回false?我在网上搜索了一下,没有找到任何类似的例子,说明在成员var refs上使用运算符。接下来,我需要看看当文件打开失败时它会做什么。
可能这段代码最初使用堆指针vars或其他方法来处理
var中的
m_,然后在某个地方将其更改为普通成员var,然后将运算符编辑为?我认为历史不容易获得。

感谢您的帮助,stackoverflow非常棒。

istream有一个标志,指示是否发生了错误,它会覆盖!操作员,方便访问。您经常会看到它是这样使用的:

myStream >> line;
if(!myStream)
   cout<<"Error reading data"<<endl;
myStream>>行;
如果(!myStream)
库特
myStream >> line;
if(!myStream)
   cout<<"Error reading data"<<endl;