在评估`if()`语句中的条件时,旧版本的C++是否使用类的`int`运算符?

chu*_*ica 5 c++

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)

一些细节,为什么这样一个问题:问题与转换旧的大整数类可能是由于intboolif().不再能够访问旧的编译器,因此无法测试旧的行为.


[编辑]
使用下面的答案和一些更多的研究:
答案:是的,许多ISO标准C++版本(1980年代中期-1998),缺少一个bool,确实使用演员表int(或其他数字类型).存在显着的编译器变化 - 它是预先标准的.

第一个C++ ISO标准于1998年出版(ISO/IEC 14882:1998又名C++ 98).它定义了bool类型.因此ISO标准C++一直使用bool强制转换if().

Ste*_*sop 6

我无法直接回答这个问题,但Herb Sutter说bool 1990年发布的C++预标准版本没有类型.

因此,if不可能使用operator bool(),在我看来它可能会使用,operator int()如果它可以工作.但是,我没有1990 C++参考手册的副本来确认.