【发布时间】:2014-06-23 05:37:09
【问题描述】:
这听起来像是一个奇怪的问题,但我是否可以安全地为 FILE 对象定义 operator<< 或 operator>>,或者我会违反 C 或 C++ 标准中的潜在条款,还是可能导致其他问题?
(是的,我确实了解 C++ I/O 流。我不问这是否是一个好的主意。我我在问它是否允许。)
例子:
#include <stdio.h>
FILE &operator>>(FILE &file, int &d)
{
if (fread(&d, sizeof(d), 1, &file) != 1)
{ throw "I/O error"; }
return file;
}
int main()
{
int x;
FILE *file = fopen("File.bin", "rb");
*file >> x;
fclose(file);
return x;
}
【问题讨论】:
-
我认为这与 C 无关。
-
@JonathonReinhart:C 标准有一个
stdio.h,实际上我引用了它。我认为 C++ 标准在这里确实遵循 C。 -
允许在高速公路中间玩耍……但这不是一个好的主意。尝试一下! (重载 FILE 运算符,而不是在街上玩。)这是你的代码!不会破坏任何东西!
-
@lornix:我实际上认为在某些地方在高速公路中间玩耍可能是非法的。 =P
-
@Praetorian:这并不要求它是一个完整的类型,是吗?它被转换为引用,而不是值。
标签: c++ c operator-overloading language-lawyer