хотя-бы в потому что mql строка не является "указателем" как в C. У неё нет специального состояния "вообще совсем ничто"
PS (о как, сам от себя такого не ожидал)
увы нет, строка в MQL это сущность с выделенной памятью, @Ilyas объяснял, почему StringBufferLen() может не показывать длину строки, а показывает именно выделенную память под хранение строки
fxsaber:
Каждый день это состояние использую.
вооообще не показатель, я так в MQL4 через StringConcatenate() распринтовывал указатели на любой обьект, т.е. работа встроенных функций реализована не по правилам MQL )))
вооообще не показатель, я так в MQL4 через StringConcatenate() распринтовывал указатели на любой обьект, т.е. работа встроенных функций реализована не по правилам MQL )))
пару раз еще делал эксперименты с input string s = NULL;
насколько я понял, что пока мы не пытаемся использовать значение инпут-переменной - это значение будет NULL, но в тот момент если мы попробуем присвоить значение этой инпут переменно другой переменной или просто распринтовать эту инпут-переменную, то этот NULL исчезает, т.е. этой инпут-стриг переменной будет выделена память
насколько я понял, что пока мы не пытаемся использовать значение инпут-переменной - это значение будет NULL, но в тот момент если мы попробуем присвоить значение этой инпут переменно другой переменной или просто распринтовать эту инпут-переменную, то этот NULL исчезает, т.е. этой инпут-стриг переменной будет выделена память
Механизм работы input-переменной подробно описал выше.
Да, наверное, такое поведение - просто "защита от дурака". Видно, ввиду того, что input переменная должна быть проинициализирована, то в инпут = NULL исскуственно приравнивается к ="", когда переменная уже занимает хотя бы один байт в памяти.
В MQL5 записи:
абсолютно идентичны. Памяти под переменную не выделяется. Во всяком случае я не нашел различий. А в java, например, такие записи имеют небольшое различие, не смотря на то, что в обоих случаях тоже не выделяется памяти под переменную. Первый вариант (String str = null;) будет считаться проинициализированным, хотя памяти под переменную не выделяеся, и переменную можно распечатать как пустую. А во втором случае(String str;) при попытке печати переменной будет генерироваться ошибка о непроинициализированной переменной. Т.е. MQL5 в этом плане более толерантный. Что лучше, даже не знаю.
Как это память под переменную не выделяется? Память выделяется, и переменная содержит произвольный мусор. А то что стринг не выводит не каких значений, логично же что буфер пустой.
Как это память под переменную не выделяется? Память выделяется, но переменная не содержит произвольный мусор. А то что стринг не выводит не каких значений, логично же что буфер пустой.
char ch;
short sh;
string st;
Print(sizeof(ch));
Print(sizeof(sh));
Print(sizeof(st));
string str1;
string str2="Однажды, в студёную зимнюю пору я из лесу вышел; был сильный мороз.";
Print(sizeof(str1)); // 12Print(sizeof(str2)); // 12uchar ch1[],ch2[];
Print(StringToCharArray(str1, ch1)); // 0Print(StringToCharArray(str2, ch2)); // 68
2020.01.27 01:15:57.859 tst (EURUSD,H1) (null) , 0.000000 , 0
если убрать приведение типов, то будет ошибка 'NULL' - expression of 'void' type is illegal
занятно, получается, что nput string может быть инициализирован void
NULL - инициализация. Специально же в примере показана не input-строка.
NULL / NIL (в прочих терминах) не могут быть инициализацией константной сущности строки.
хотя-бы в потому что mql строка не является "указателем" как в C. У неё нет специального состояния "вообще совсем ничто"
PS (о как, сам от себя такого не ожидал)
У неё нет специального состояния "вообще совсем ничто"
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Особенности языка mql5, тонкости и приёмы работы
fxsaber, 2020.01.26 15:54
Каждый день это состояние использую.
хотя-бы в потому что mql строка не является "указателем" как в C. У неё нет специального состояния "вообще совсем ничто"
PS (о как, сам от себя такого не ожидал)
увы нет, строка в MQL это сущность с выделенной памятью, @Ilyas объяснял, почему StringBufferLen() может не показывать длину строки, а показывает именно выделенную память под хранение строки
Каждый день это состояние использую.
вооообще не показатель, я так в MQL4 через StringConcatenate() распринтовывал указатели на любой обьект, т.е. работа встроенных функций реализована не по правилам MQL )))
вооообще не показатель, я так в MQL4 через StringConcatenate() распринтовывал указатели на любой обьект, т.е. работа встроенных функций реализована не по правилам MQL )))
Без разницы, как внутри.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Особенности языка mql5, тонкости и приёмы работы
Igor Makanu, 2020.01.26 22:27
Без разницы, как внутри.
дополнил свой пост, Вашим примером
пару раз еще делал эксперименты с input string s = NULL;
насколько я понял, что пока мы не пытаемся использовать значение инпут-переменной - это значение будет NULL, но в тот момент если мы попробуем присвоить значение этой инпут переменно другой переменной или просто распринтовать эту инпут-переменную, то этот NULL исчезает, т.е. этой инпут-стриг переменной будет выделена память
насколько я понял, что пока мы не пытаемся использовать значение инпут-переменной - это значение будет NULL, но в тот момент если мы попробуем присвоить значение этой инпут переменно другой переменной или просто распринтовать эту инпут-переменную, то этот NULL исчезает, т.е. этой инпут-стриг переменной будет выделена память
Механизм работы input-переменной подробно описал выше.
Без разницы, как внутри.
есть (всё ещё) специфика работы (отношений) разыменования сущностей (ну нету в mql указателей, он не С, пусть будут сущности)
input - это такой const объявляемый при запуске.ему физически нельзя дать значение "НИЧЕГО"
const string nothing=NULL; /// <--- ЭТО ЧТО ?
Да, наверное, такое поведение - просто "защита от дурака".
Видно, ввиду того, что input переменная должна быть проинициализирована, то в инпут = NULL исскуственно приравнивается к ="", когда переменная уже занимает хотя бы один байт в памяти.
В MQL5 записи:
абсолютно идентичны. Памяти под переменную не выделяется. Во всяком случае я не нашел различий.
А в java, например, такие записи имеют небольшое различие, не смотря на то, что в обоих случаях тоже не выделяется памяти под переменную. Первый вариант (String str = null;) будет считаться проинициализированным, хотя памяти под переменную не выделяеся, и переменную можно распечатать как пустую. А во втором случае(String str;) при попытке печати переменной будет генерироваться ошибка о непроинициализированной переменной.
Т.е. MQL5 в этом плане более толерантный.
Что лучше, даже не знаю.
Как это память под переменную не выделяется?
Память выделяется, и переменная содержит произвольный мусор.
А то что стринг не выводит не каких значений, логично же что буфер пустой.
Как это память под переменную не выделяется?
Память выделяется, но переменная не содержит произвольный мусор.
А то что стринг не выводит не каких значений, логично же что буфер пустой.