class Testable {
typedef void (Testable::*bool_type)() const;
public:
operator bool_type() const {
...
}
};
& hellip; определяет неявное преобразование в bool_type
, которое является недоступным указателем на тип члена.
Это метод C++ 03 для обеспечения неявного преобразования в bool
, избегая непреднамеренных неявных преобразований, в частности для разрешения перегрузки вызова функции. Возвращаемый элемент-указатель преобразуется в bool
, но не в любой тип, который можно было бы использовать для аргумента функции. Напротив, чистый результат bool
преобразует, например, int
, а результат void*
, так как used by C++03 iostreams, соответствовал бы формальному аргументу void*
.
С C++ 11 и позже вы бы вместо того, чтобы использовать explicit
, как это:
explicit operator bool() const { return whatever; }
Но лучше, определить именованный функцию преобразования, например,
auto is_empty() const -> bool { return whatever; }
Это было в целом лучше также в C++ 03. :-)
Относительно “ такой код эквивалентен & hellip; ”, нет, это не так.
Close-voter: что вы думаете о непонятном в этом вопросе? Пожалуйста, не голосуйте из невежества. –