使用运算符>> 与指向 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;
}
相关文章:
- ifstream什么都没读
- EASTL矢量<向量<int>>连续的
- ifstream文件在从行中读取时被清除
- std::ifstream::read 不会读取所有 512 字节,并设置 EOF 和失败位
- 将 ifstream 拆分为 n 个流?
- 如何将 std::ifstream 转换为 std::basic_istream<CharT, Traits>&?
- 我在 ifstream input_file(文件名)行中收到错误"no matching function to call";
- 尝试打开 ifstream 时出现"Incomplete type"错误
- 是否可以在没有真实文件的情况下创建 ifstream
- 虽然循环不读取整个 ifstream 文件
- std::ifstream 在读取文件中最后一项时设置 eofbit,但仅在读取数值类型时发生
- Ofstream和IFSTREAM有什么区别?
- 如何将QByteArray转换为std::istream或std::ifstream?
- ifstream 跳过数字,只写 0
- C++:std::ofstream 方法 open() 在第二次迭代时擦除打开的 ifstream 文件
- 在函数中声明的 ifStream 对象在发布模式下不起作用
- fstream / ifstream / ofstream 对象如何转换为布尔值
- ifstream 尝试读取 9 到 13 之间的无符号字符时非常奇怪的行为
- 尝试在 C++ 中为 ifstream 提供一个变量
- ifstream 读取的字符与文件中写入的字符不同