У меня есть два класса A
и B
, каждый из которых имеет значение operator bool()
.Предотвращение преобразования двух объектов из двух классов в bool при выполнении: if (a! = B)
Недавно я наткнулся на ошибку, которая была вызвана:
A a;
B b;
if(a!=b)
{
//...
}
Этот код скомпилированный отлично под GCC 4.9.1 и преобразовываются а и Ь к BOOL перед сравнением.
Возможно ли определить что-то, что предотвратило бы это и вызвало бы ошибку компиляции, чтобы заставить программиста использовать явную функцию преобразования, предоставляемую A и B? Объявления A и B должны быть несвязанными, они находятся в разных заголовках.
Вы можете перегрузить оператор ' ! = (A, B) 'или сделать ваши конверсии bool« явными » –
Сделать преобразования для' bool' 'explicit'? Обычно это правильно, и контексты, такие как 'if (a)' все еще считаются *, контекстуально конвертируются в 'bool' * *. – BoBTFish
, когда вы говорите «преобразование», вы имеете в виду «сравнение»? –