Ошибки, баги, вопросы - страница 1768
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Такое возможно только в тупом компиляторе. Сами же все понимаете.
using namespace std;
struct S
{
S operator +(const S&) {cout << "operator +\n"; return S{};}
};
S operator ""_s(const char*, size_t) {cout << "literal operator\n"; return S{};}
int main()
{
cout << "___literal concatenation example___\n";
S s = "sd"_s "sf"_s;
cout << "___operator+ example___\n";
S s2 = "sd"_s + "sf"_s;
}
___literal concatenation example___
literal operator
___operator+ example___
literal operator
literal operator
operator +
Как видно, оператор+ не был заменён склейкой во втором случае (создалось для литерала с последующим run time сложением). Компиятор просто не может вырезать его из-за слишком больших возможностей у программиста, это сильно ограничивает возможности для оптимизации. Это не МКЛ, конечно, в нём может всё иначе, но само утверждение: "нормальный компилятор всё сделает за меня" - ошибочно.Это не МКЛ, конечно, в нём может всё иначе, но само утверждение: "нормальный компилятор всё сделает за меня" - ошибочно.
Заколебался уже выкидывать в трубу время и деньги: оптимизатор зависает на последнем проходе. Агенты ничего не делают, все на стадии Authorized. В журнале тишина. Включать/отключать агентов бессмысленно, после повторного запуска оптимизации все начинается с нуля.
Кто сталкивался? Как бороться?
Волшебная строка
Последовательность действий в MetaEditor\1495 при разрешении экрана 1024x768 :
- Открыть прилагаемый файл
- Ползунок горизонтальной прокрутки передвинуть до конца вправо (как на рисунке)
- В 3-ей строке выделить мышью фрагмент /*12345*/
Дополнительные настройки: Сервис\Настройки\Общие\Табуляция 4 символаПри попытке преобразования строки в число с помощью функции StringToInteger(), в случае, если строка не содержит числа возвращается 0 без ошибки (GetLastError() = 0). В случае, если во входных параметрах представлена строка и пользователь некорректно указал значения - функция вернет некорректное значение и не выдаст ошибки. Это плохо.
Далее, если строка содержит некорректное представление числа, например 5о (вместо 50) - функция вернет значение 5, опять же не выдав ошибки. И тут мало того, что это не 0, дак функция разобрала строку как 5, что опять таки не корректно.
Уважаемые разработчики, доработайте функцию, пожалуйста, добавив коды ошибок или же в случае невозможности разбора - вернув значение LONG_MAX + ошибку, чтобы можно было определить что не так. Сейчас этого сделать невозможно.
Код проверочного скрипта:
#property script_show_inputs
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
input string value="05";
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
const long iValue=StringToInteger(value);
Print("iValue = ",iValue,", lastError = ",GetLastError());
}
//+------------------------------------------------------------------+
Реализуйте свой вариант функции - это займет не больше 10 минут.
Поведение системных функций мы менять не будем.
Реализуйте свой вариант функции - это займет не больше 10 минут.
Поведение системных функций мы менять не будем.
Т.е. Вы не считаете, что нужно дорабатывать функции, тем более функции, которые явно могут соврать?
Даже если бы просто добавили коды ошибок - уже было бы хорошо, а так Вы предлагаете изобрести велосипед. Не сложный, конечно, но велосипед.
Т.е. Вы не считаете, что нужно дорабатывать функции, тем более функции, которые явно могут соврать?
Даже если бы просто добавили коды ошибок - уже было бы хорошо, а так Вы предлагаете изобрести велосипед. Не сложный, конечно, но велосипед.
Ошибка при компиляции
struct S {};