Во втором случае компилятор знает, что это bool, и он также выполняет неявное приведение, но добавляет предупреждение. Это не связно.
да, компилятор выполнит приведение типов при выполнении команды return()
но предупреждение и появляется именно по этому вопросу
вот Ваш код:
bool main()
{
bool result=func1()&func2(); // no warning...why ? return func1()&func2(); // warning...it's ok
}
функция main() имеет тип bool , а результат который получается в return() имеет целый тип , попробуйте вот такой пример:
int main()
{
double result=func1()+func2();
return (func1()+func2()); // possible loss of data due to type conversion
}
//+------------------------------------------------------------------+double func1()
{
Print("Function #1");
return (1.123);
}
//+------------------------------------------------------------------+double func2()
{
return(4.567);
}
//+------------------------------------------------------------------+
в моем примере компилятор тоже напишет предупреждение, что возможна потеря данных.... у меня функция int main() , а результат в return() имеет тип double
Часто возникает необходимость преобразовать один числовой тип в другой. Не каждый числовой тип допустимо преобразовать в другой, допустимые преобразования в MQL4 показаны на схеме: Сплошные линии со стрелками обозначают преобразования, которые выполняются без потери информации. Вместо типа char может выступать тип bool (оба занимают в памяти 1...
Результат побитовой операции двух bool - int.
потому что & это "Побитовая операция И" https://www.mql5.com/ru/docs/basis/operations/bit
а Вам скорее всего нужно && https://www.mql5.com/ru/docs/basis/operations/bool
Я знаю.
Вопрос в том, почему есть разница между этими двумя строками?
Я знаю.
Вопрос в том, почему есть разница между этими двумя строками?
Bitwise operations are performed with integers only.
try
Я знаю.
Вопрос в том, почему есть разница между этими двумя строками?
Потому, что в первой строке есть явное присвоение типа логической операции к типу bool: bool result = func1()&func2();
Во второй же строке из функции с типом bool возвращается результат логической операции, а он не bool: bool main() { return func1()&func2(); }
Потому, что в первой строке есть явное присвоение типа логической операции к типу bool : bool result = func1()&func2() ;
Во второй же строке из функции с типом bool возвращается результат логической операции , а он не bool: bool main() { return func1()&func2() ; }
@Ilyas
Извините, но нет никакой разницы. В первом случае нет явного приведения, но неявного.
Во втором случае компилятор знает, что это bool, и он также выполняет неявное приведение, но добавляет предупреждение. Это не связно.
P.S: I don't know if the translation is correct, so I will wait Ilyas answer, no offense.
Во втором случае компилятор знает, что это bool, и он также выполняет неявное приведение, но добавляет предупреждение. Это не связно.
да, компилятор выполнит приведение типов при выполнении команды return()
но предупреждение и появляется именно по этому вопросу
вот Ваш код:
функция main() имеет тип bool , а результат который получается в return() имеет целый тип , попробуйте вот такой пример:
в моем примере компилятор тоже напишет предупреждение, что возможна потеря данных.... у меня функция int main() , а результат в return() имеет тип double
https://docs.mql4.com/ru/basis/types/casting
https://docs.mql4.com/en/basis/types/casting