Современные версии С++ пытаются использовать оператор 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()
.