![](/img/trans.png)
[英]How to use insertion operator with a shared_ptr pointer of an ifstream object?
[英]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.