Написал бы что принтит этот код, для наглядности
Я думаю что лучше не засовывать строки как булевские параметры, и не преобразовывать в них. Это же ведь не очевидно (касаемо результата), и зачем лишний раз голову ломать.
Как преобразуется string в bool вот в таком коде? Я ожидал, будет хотя бы варнинг, однако проглотило без замечаний. Собственно, почему пишу, по ошибке вместо bool послал в функцию _Symbol и потом долго искал, где ошибка.
Такой код нормален или нет?
PS: я в курсе, что false == 0, а true - любое значение, отличное от нуля. Но вот с такой интерпретацией строки... Кстати, пустая строка распознается, как false. Но ведь она же и пустая - объект?
{
string s = "qwerty";
if(TestBool(s))
Print("TestBool==true");
else
Print("TestBool==false");
if(s)
Print("s==true");
else
Print("s==false");
}
bool TestBool(bool b)
{
return b;
}
***
лови
Преобразование string значений в bool
\param string aValue - значение для преобразования в тип bool
\return преобразованное значение
*/
static bool CUtils::StringToBool(string aValue) {
if(aValue != "true" && aValue != "false")
printf(__FUNCTION__ + " переданное значение не соответствет типу bool в строковом виде");
if(aValue == "true")
return true;
//---
return false;
}
Написал бы что принтит этот код, для наглядности
Я думаю что лучше не засовывать строки как булевские параметры, и не преобразовывать в них. Это же ведь не очевидно (касаемо результата), и зачем лишний раз голову ломать.
Принтит TestBool==true
Я же написал, что по-моему это ошибка, компилятор не должен пропускать передачу строки, как тип bool.
Короче, проверил в C++ на VS2015
#include <string>
#include <ostream>
#include <iostream>
int main()
{
std::string s = "qwerty";
if (TestBool(s))
std::cout << "TestBool==true";
else
std::cout << "TestBool==false";
if (s)
std::cout << "s==true";
else
std::cout << "s==false";
}
bool TestBool(bool b)
{
return b;
}
Естественно, получил ошибку компиляции:
Error (active) no suitable conversion function from "std::string" to "bool" exists ConsoleApplication1 c:\MyP\AvForex\trunk\AvRobot\ConsoleApplication1\ConsoleApplication1\ConsoleApplication1.cpp 12
Error (active) expression must have bool type (or be convertible to bool) ConsoleApplication1 c:\MyP\AvForex\trunk\AvRobot\ConsoleApplication1\ConsoleApplication1\ConsoleApplication1.cpp 17
*** Писать в сервисдеск?
лови
Преобразование string значений в bool
\param string aValue - значение для преобразования в тип bool
\return преобразованное значение
*/
static bool CUtils::StringToBool(string aValue) {
if(aValue != "true" && aValue != "false")
printf(__FUNCTION__ + " переданное значение не соответствет типу bool в строковом виде");
if(aValue == "true")
return true;
//---
return false;
}
if(s != "")
Alert(s);
Когда-то пытался возмущаться, но мне объяснили, что это, оказывается, нормально.
А чего так смущает, по-моему очевидно, что прикрутили что-то вроде bool string::operator bool() {return ! this.empty();}.
Зачем мне это? Я писал совсем о другом.
А чего так смущает, по-моему очевидно, что прикрутили что-то вроде bool string::operator bool() {return ! this.empty();}. Я был больше удивлён из-за такой ерунды (алерт срабатывает):
if(s != "")
Alert(s);
Когда-то пытался возмущаться, но мне объяснили, что это, оказывается, нормально.
Не согласен. Строка - это, по сути, встроенный класс. И он должен подчиняться общим законам приведения типов, а не выдавать отсебятину. Вот такой код не компилируется
if(TestBool(oinfo))
Print("oinfo==true");
else
Print("oinfo==false");
---------------
'oinfo' - parameter conversion not allowed TestIf.mq5 16 17
***
dynamic_cast |
А чего так смущает, по-моему очевидно, что прикрутили что-то вроде bool string::operator bool() {return ! this.empty();}. Я был больше удивлён из-за такой ерунды (алерт срабатывает):
if(s != "")
Alert(s);
Когда-то пытался возмущаться, но мне объяснили, что это, оказывается, нормально.
Проверил, и правда выдает алерт! А вот так не выдает, очередной бред языка (((
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Как преобразуется string в bool вот в таком коде? Я ожидал, будет хотя бы варнинг, однако проглотило без замечаний. Собственно, почему пишу, по ошибке вместо bool послал в функцию _Symbol и потом долго искал, где ошибка.
Такой код нормален или нет?
PS: я в курсе, что false == 0, а true - любое значение, отличное от нуля. Но вот с такой интерпретацией строки... Кстати, пустая строка распознается, как false. Но ведь она же и пустая - объект?
{
string s = "qwerty";
if(TestBool(s))
Print("TestBool==true");
else
Print("TestBool==false");
if(s)
Print("s==true");
else
Print("s==false");
}
bool TestBool(bool b)
{
return b;
}
***