为什么'ios :: operator!'和'ios :: operator void *'而不是'ios :: operator bool'?

时间:2013-02-21 03:00:54

标签: c++ boolean operator-overloading type-conversion iostream

C ++标准I / O流类ios定义了两个用于检查流状态的重载运算符!void*

例如:

ifstream fin("hello.txt");
if (fin)  {} // ios::operator void*() is called
if (!fin) {} // ios::operator !() is called

但是,我认为两个重载运算符过度。为什么不只是一个重载函数operator bool()

可能是因为在bool成为C ++关键字之一之前广泛使用了I / O流类。换句话说,保持它们只是为了向后兼容。

如果只是为了向后兼容,为什么它们没有被标记为已弃用?如果不是为了向后兼容,那么为了什么?

0 个答案:

没有答案