bool在评估if()语句中的条件时,C++的现代版本尝试使用类的运算符.其他铸造操作员,例如int在没有bool操作员时使用.这在下面说明.
#include <iostream>
using namespace std;
class TwoInts {
public:
int a,b;
operator bool() { cout << "TwoInts to bool" << endl; return 0;}
operator int() { cout << "TwoInts to int" << endl; return 0;}
};
class SixInts {
public:
int a[6];
operator int() { cout << "SixInts to int" << endl; return 0;}
};
int main(void) {
TwoInts T;
SixInts S;
if (T) cout << "xxx" << endl;
if (S) cout << "xxx" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
运行此代码不会产生任何意外:
TwoInts to bool
SixInts to int
Run Code Online (Sandbox Code Playgroud)
查看一些旧的C++代码,似乎有一个我想要验证的更改.在评估语句中的条件时,
旧版本的C++是否使用int类的运算符if()? 有什么版本,如果有的话呢?
那么建议的输出就是
TwoInts to int
SixInts to int
Run Code Online (Sandbox Code Playgroud)
一些细节,为什么这样一个问题:问题与转换旧的大整数类可能是由于int与bool在if().不再能够访问旧的编译器,因此无法测试旧的行为.
[编辑]
使用下面的答案和一些更多的研究:
答案:是的,许多ISO标准C++版本(1980年代中期-1998),缺少一个bool,确实使用演员表int(或其他数字类型).存在显着的编译器变化 - 它是预先标准的.
第一个C++ ISO标准于1998年出版(ISO/IEC 14882:1998又名C++ 98).它定义了bool类型.因此ISO标准C++一直使用bool强制转换if().
我无法直接回答这个问题,但Herb Sutter说bool 1990年发布的C++预标准版本没有类型.
因此,if不可能使用operator bool(),在我看来它可能会使用,operator int()如果它可以工作.但是,我没有1990 C++参考手册的副本来确认.