簡體   English   中英

使用運算符>>和指向ifstream對象的指針

[英]Using operator>> with a pointer to ifstream object

為什么以下代碼中的指令os->operator>> input錯誤? 操作符>>的返回值不是對象* os嗎?

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{
  double input;
  ifstream * os = new ifstream("prova.dat");
  os->operator>> input;
  return 0;
}

當您要將>>用作方法時,則需要像普通函數一樣通過()傳遞參數。 要取消引用它,您應該使用以下兩種方法:

os->operator >> (input);

要么

*os >> input;

注意:為什么要使用指針,則可以使用自動對象或引用。 此外,您需要管理分配的對象並釋放它。

如果要創建指向此類流的指針,則可能是在做錯什么。

這應該工作正常:

int main()
{
  double input;
  std::ifstream os("prova.dat");
  os >> input;
  return 0;
}

由於ifstream是在堆棧上分配的,因此在函數完成時將自動清除它,這將關閉基礎文件句柄。 您錯過了需要在代碼中執行相同操作的顯式delete

如果您需要傳遞信息流,可以通過參考進行:

double read_double(std::ifstream& stream)
{
  double d;
  stream >> d;
  return d;
}

int main()
{
  std::ifstream os("prova.dat");
  double input = read_double(os);
  return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM