Используется неявное приведение, да, но, все равно, бага, похоже. bool, получается, может быть не true и не false.
вероятно справку следует читать БУКВАЛЬНО:
Логические константы имеют значение true (истина) или false (ложь), числовое представление которых 1 или 0 соответственно. Могут использоваться написания True, TRUE, False и FALSE.
Примеры:
bool a = true;
bool b = false;
bool c = 1;
Внутреннее представление - длинное целое число размером 4 байта. Логические константы могут принимать значения 0 и 1.
т.е. получается внутри четырех байт может лежать все что угодно, но только 0 и 1 распознаются как "истинно правильные"(?) логические значения.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Доброго времени суток!
Господа, объясните плиз почему следующая провокация не вызавает никаких ошибок ни при компилляции ни при тестировании.
int Somefunc() //создаем функцию типа INT
{
return(-50); //которая возвращает -50
}
int start()
{
bool error; //В переменную типа BOOL передаем значение типа INT (-50)
error=Somefunc(); //
if (error==true) Print("ERROR!"); //условие не срабатывает
if (error==false) Print("NotError!"); //условие не срабатывает
if (error!=true && error!=false) Print(error); //сработало с возвратом -50
return(0);
}
Или вот така провокация:
int Somefunc() //создаем функцию типа INT
{
return(-50.500); /которая возвращает -50.500
}
int start()
{
bool error;
error=Somefunc(); //В переменную типа BOOL передаем значение типа DOUBLE(-50.500)
if (error==true) Print("ERROR!"); //условие не срабатывает
if (error==false) Print("NotError!"); //условие не срабатывает
if (error!=true && error!=false) Print(error); //сработало с возвратом -50.500
return(0);
}
По какой причине ЯВНОЕ нарушение совместимости типов не дает никаких ошибок? (по крайней мере на компиляторе и тестере). Или это так называемое расширение (приведение типа) типа до совместимого значения. Но зачем тогда разделять INT, DOUBLE и BOOL если они так легко преобразуюся друг в друга, не вызывая при этом ошибок?
P.S. Чтоб у вас все было и вам за это ничего не было.