Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Рассчитывать на значение или поведение "по-умолчанию" - себе дороже :). Но деньги Ваши - можете и дальше верить и объявлять переменные БЕЗ ПРИНУДИТЕЛЬНОЙ инициализации.
Ёкарныйбабай... Я об одном, он - о другом.
Я инициализирую всегда свои переменные. Так понятно?
Но и справку читаю, и вопросы меня интересующие в СД задаю и получаю на них ответы, которые потом знаю и могу их озвучивать, а не читать свои мантры как некоторые жители лесов ;)
Артем, это вас так СД любит или другому отвечали? )))) Мне вот так не пишут, просто, спасибо за выявленную ошибку, в след. релизе исправим. А вот с глобальными переменными индикаторов надо проверить в МТ5, в четверке они сбрасывались при смене ТФ, что было для меня неприятной неожиданностью.
Не знаю насчёт любви и преданности ;)
Просто ответили профессионально, красиво и полно.
И по индикаторным тоже написали в дополнение - их поведение отличается от глобальных переменных экспертов.
А вы не видите разницы между голым указателем и классом СТРОКА? Строка не может принимать 0, такого состояния она не имеет.
Запустите:
std::string s = 0;
Не знаю насчёт любви и преданности ;)
Просто ответили профессионально, красиво и полно.
И по индикаторным тоже написали в дополнение - их поведение отличается от глобальных переменных экспертов.
Да, я все прочитал и удивился такому развернутому ответу )). Тут же многие СД ругают, типа, не отвечают годами. Мне кажется, товарищи пишут письма, как в клуб телепатов, вот им и не отвечают )) У меня тоже нет претензий к СД, четко реагируют на баг-репорты, которые я иногда шлю.
А вы не видите разницы между голым указателем и классом СТРОКА? Строка не может принимать 0, такого состояния она не имеет.
Не имеет?
struct String {
String() { len = 0; ch = 0; }
String( char *_ch ) { len = strlen( _ch ) + 1; ch = new char[]; strcpy( _ch, ch ); }
char *ch;
int len;
};
#else
#define String string
#endif
void OnStart()
{
String ch1; //NULL
String ch2 = "";
}
Здесь строка ch1 приняла состояние NULL и она не равна ch2
и это - общепринятый подход
Не имеет?
struct String {
String() { ch = 0; len = 0; }
String( char *_ch ) { len = strlen( _ch ) + 1; ch = new char[]; strcpy( _ch, ch ); }
char *ch;
int len;
};
void OnStart()
{
String ch1;
String ch2 = "";
}
#endif
Вот - строка ch1 приняла состояние NULL и она не равна ch2
и это общепринятый подход
Не факт, что в MQL строка - это класс. По крайней мере, @Slawa сегодня ответил, что память выделяется только под указатель на буфер. По идее, нам без разницы, класс там или рантайм своими функциями этот буфер обрабатывает, все равно код проприентарный.
Класс, не класс. Обо всём можно сказать что это класс, даже об int, встроенный, но класс. Раз замахнулись на реализацию строки, то нужно нормально делать, с нормальным операторм ==. А учитывая близость к С++ (разработчики себя так сами позиционировали), то и максимально возможную схожесть с ним.
Не имеет?
struct String {
String() { len = 0; ch = 0; }
String( char *_ch ) { len = strlen( _ch ) + 1; ch = new char[]; strcpy( _ch, ch ); }
char *ch;
int len;
};
#else
#define String string
#endif
void OnStart()
{
String ch1; //NULL
String ch2 = "";
}
Здесь строка ch1 приняла состояние NULL и она не равна ch2
и это - общепринятый подход1. И к чему вы мне это показываете? Вы 0 строке для инициализации передаёте? Если передадите, то он кастанётся к укзателю на чар, и вы получите исключение (в зависимости от компилятора) при копировании. Для того, чтобы использовать строки, мне не нужно смотреть реализацию, найдите хоть один конструктор, который принимает целое, а не указатель: http://en.cppreference.com/w/cpp/string/basic_string/basic_string. Давать NULL строке - это какая-то странная задумка от МК.
ЗЫ: цитирую справку для конструктора принимающего указатель на char*
5) Constructs the string with the contents initialized with a copy of the null-terminated character string pointed to by s. The length of the string is determined by the first null character. The behavior is undefined if s does not point at an array of at least Traits::length(s)+1 elements of CharT, including the case when s is a null pointer.
Все-таки оператор == , как минимум работает со строкой == NULL ))
void OnStart()
{
string symbol; // symbol== NULL
if(Symbol_ == symbol)
Print("symbol == Symbol_");
else
Print("symbol != Symbol_");
}
*********
2016.12.14 00:27:48.083 SomeTests (EURUSD.m,M1) symbol != Symbol_
PS: опять движок форума съел вложение кода, потому что я не выполнил ритуал и не вставил после кода какую-нибудь ненужную дрянь типа *********, а просто вставил код между написанных строк. Я так понимаю, за движок форума отвечает неприкасаемый, это у восточных народов встречается...