Я читал все эти ответы о том, почему true - это правда, и почему две булевы переменные можно сравнивать, используя ==
или !=
, за исключением редких случаев, когда целое число приводится к значению типа bool или что-то подобное , Однако у меня точно такая же проблема, как у оригинального постера. У меня есть две логические переменные, каждая из которых 'true', но когда я сравниваю их, я обнаруживаю, что они не равны. Вот строка кода,
if (angDegDiff > 15 || scaleRatioA > 5 || scaleRatioB < -5 || (isParallel2 != isParallel1))
{
return false;
}
В моем примере angDegDiff = 0
, scaleRatioA = 0
, scaleRatioB = 0
, isParallel2 = true
и isParallel1 = true
. Тем не менее, оператор оценивается как true
, и единственный способ сделать это, если isParallel2
не равен isParallel1
.
Не используются причудливые методы для установки значений isParallel1
или isParallel2
. Их значения устанавливаются таким оператором, как _isParallel = true;
. Позже это значение копируется в другую переменную с помощью оператора, такого как isParallel1 = geom1->IsParallel();
, который реализуется как return _isParallel;
.
Мой вывод заключается в том, что в зависимости от компилятора две логические переменные не могут быть надежно сопоставлены на равенство. Я использую Microsoft Visual C ++ 2005, версия 8.0.50727.4039.
Эпилог: я заменил логическое сравнение в своем коде на выражение ((isParallel1 && !isParallel2) || (!isParallel1 && isParallel2))
, и теперь все работает нормально.