![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А правильный ответ надо искать в стандарте.
Whether all string literals are stored in nonoverlapping objects and whether successive evaluations of a string literal yield the same or a different object is unspecified.
Так, что это unspecified behavior.
PS. Правда вероятность получить где-то результат отличный от true в одной единице трансляции исчезающе мала.
Да, интересно. Спасибо. Правда, все это из области "программирование ради программирования". Практического применения такого случая все равно нет, т. к. литералы - большая редкость. Чаще всего строки формируются, а не заводятся константно. Локализацию не зря придумали.
Я это к чему. Не надо строки гонять через нативный код. Если сильно надо получать их в dll, то делайте функцию size_t(wchar_t*,size_t) и заполняйте массив символов. Не помню, они гарантируют, что сигнатура импорта uint(string&,uint)/ulong(string&,ulong) правильно указатель на выделенную в string память передаст, если есть в справке такая гарантия, то юзайте, если нет, то костыль с CharArrayToString после заполнения массива.
к слову, "костыль с CharArrayToString" чуть не единственный правильный способ гонять строки.
Потому что какая конкретно кодировка подразумевается в mql-ной string (или windows wchar_t) понятие сильно растяжимое, о том доподлинно ведают только CharArrayToString и обратная ей :-)
Да, интересно. Спасибо. Правда, все это из области "программирование ради программирования". Практического применения такого случая все равно нет, т. к. литералы - большая редкость. Чаще всего строки формируются, а не заводятся константно. Локализацию не зря придумали.
Ты даже не представляешь, сколько багов вокруг нуль-терминальных строк в реальных проектах С/С++)))
PS. Лично нарывался, нарываюсь и буду нарываться)))
PSS. Да есть std::string, но есть кейсы где он реально тяжелым становится и приходится спускаться на уровень си-шных функций, ну и пошла веселуха)))
Ты даже не представляешь, сколько багов вокруг нуль-терминальных строк в реальных проектах С/С++)))
PS. Лично нарывался, нарываюсь и буду нарываться)))
PSS. Да есть std::string, но есть кейсы где он реально тяжелым становится и приходится спускаться на уровень си-шных функций, ну и пошла веселуха)))
Мы ведь говорим про константные литералы, которые компилятор преобразует неочевидным для нас образом. Если их не использовать, то обсуждаемой проблемы попросту нет. А для передачи строк в MQL все равно приходится использовать wchar_t, т. к. std::wstring::c_str() не подходит.