Современные версии С++ пытаются использовать оператор bool для класса при оценке условия в операторе if(). Другие операторы литья, такие как 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;
}
Запуск этого кода не вызывает сюрпризов:
TwoInts to bool
SixInts to int
Оглядываясь на старый код на С++, похоже, есть изменение, которое я хотел бы проверить.
Использовали ли старые версии С++ оператор int класса при оценке условия в выражении if()? Какие версии, если они есть, сделали это?
Предполагаемый вывод тогда был бы
TwoInts to int
SixInts to int
Некоторые сведения о том, почему вопрос: проблемы с преобразованием старого большого целочисленного класса могут быть связаны с int vs. bool в if(). У вас больше нет доступа к старому компилятору, поэтому он не может проверить старое поведение.
[Изменить]
Используя ответы ниже и еще несколько исследований:
Ответ: Да, многие версии ISO Standard С++ (в середине 1980-х - 1999), которые не имели bool, использовали приведения к int (или другим числовым типам). Существовало значительное изменение компилятора - оно было стандартным.
Первый стандарт С++ ISO вышел в 1998 году (ISO/IEC 14882: 1998 aka С++ 98). Он определил тип bool. Таким образом, стандарт ISO С++ всегда использовал листинг bool в if().