Ошибки, баги, вопросы - страница 3380

 
Alexey Klenov #:

Возможно так будет понятнее.

Цикл не завершается

Причем это только с типом uint,  int отрабатывает правильно

Тип данных ulong тоже уходит в отрицательную зону, тоесть не завершается цикл. Вывод в журнал к сожалению выводить именно со знаком так как IntegerToString

IntegerToString

Принимает long

У беззнаковых целыл чисел нет "отрицательных зон". Если беззнаковое целое имеет значение "0", то его уменьшение на 1 приведёт не к отрицательному, а к максимальному для данного типа значению.
 
Alexey Klenov #:
Да это я понимаю, просто цикл должен был отработать всего один раз и завершиться, а не уходить в "отрицательную зону", по сути в "бесконечность"

Один раз отработает такой вариант:

  for(uint t = 1; t > 0; t--)
   {
    Print("t=" + IntegerToString(t));
   }
 
Ошибка при выполнении:
struct A {
    A( int i ) : i( i ) { Print( "+", i ); } //создание(+)
    ~A()                { Print( "-", i ); } //удаление(-)
    const int i;
};
void OnStart()
{
    OnStart2();
    static A a3(3);
}
void OnStart2()
{
    static A a1(1);
    static A a2(2);
}
Результат:   +1+2+3-2-1-3 //непонятный порядок
Ожидалось: +1+2+3-3-2-1 //LIFO порядок

Чем то напоминает эту ошибку, но там хотя бы обратный порядок FIFO был, а здесь вообще порядка нет
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

A100, 2023.09.06 09:41

void OnStart()
{
    OnStart2();
    static A a3(3); // Последним создан, первым удален.
}
void OnStart2()
{
    static A a1(1); // Первый создан, последний удален.
    static A a2(2); // Второй создан, предпоследний в удалении.
}

Вроде, логично.

 
fxsaber #:

Вроде, логично.

Из Вашего сообщения не понятно какой вариант Вы считаете логичным, потому что по факту все происходит не как у Вас описано:

// Последним создан, первым удален.
// Первый создан, последний удален.
// Второй создан, предпоследний в удалении.

Напомню:

Результат:   +1+2+3-2-1-3 //непонятный порядок
Ожидалось: +1+2+3-3-2-1 //LIFO порядок
 
A100 #:

Из Вашего сообщения не понятно какой вариант Вы считаете логичным, потому что по факту все происходит не как у Вас описано:

Когда писал, ошибся. Сначала удаляются OnStart2-переменные, затем - OnStart.
 
fxsaber #:
Когда писал, ошибся. Сначала удаляются OnStart2-переменные, затем - OnStart.

А причем здесь OnStart и OnStart2 ? если static удаляются в конце программы, за их пределами, когда уже никаких OnStart и OnStart2 нет

 
A100 #:

А причем здесь OnStart и OnStart2 ? если static удаляются в конце программы, за их пределами, когда уже никаких OnStart и OnStart2 нет

Я просто полностью понимаю логику текущей реализации.

 
fxsaber #:

Я просто полностью понимаю логику текущей реализации.

Если бы понимали, то не дописали бы это

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2023.09.06 10:56

Вроде, логично.

void OnStart()
{
    OnStart2();
    static A a3(3); // Последним создан, первым удален.
}
void OnStart2()
{
    static A a1(1); // Первый создан, последний удален.
    static A a2(2); // Второй создан, предпоследний в удалении.
}
которое потом объяснили якобы ошибкой
 
A100 #:

Если бы понимали, то не дописали бы это

которое потом объяснили якобы ошибкой

Это нормально, когда быстро отвечаешь и не особо проверяешь то, что написал.

На данный момент понимание такое, что без запуска пойму результат.