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

 
A100:

Ошибка при компиляции

void f( int& i ){ Print( i ); }
void OnStart()
{
        int a, b;
        f( a == 5 ); //error: '=' - parameter passed as reference, variable expected
        f( b == a ); //error: '=' - parameter passed as reference, variable expected
}
 
Vitalii Ananev:
В Вашем примере ошибка обоснована, у меня другой случай
 
A100:
В Вашем примере ошибка обоснована, у меня другой случай

Невнимательно прочитал код, на автомате решил что у вас там условный оператор if, а у вас просто функция под названием f. 

Надо передавать в функцию переменную или какое то  значение заранее вычисленное, а не выражение.

void f( int& i ){ Print( i ); }
void OnStart()
{
        int a = 5;
        int b = a;
        f(a); //error: '=' - parameter passed as reference, variable expected
        f(b); //error: '=' - parameter passed as reference, variable expected
}
 
Vitalii Ananev:

Надо передавать в функцию переменную или какое то  значение заранее вычисленное, а не выражение.

А в чем разница?

//1.mq5
         a = 5;
         f( a );
//2.mq5
         f( a = 5 );
 
A100:

А в чем разница?

В первом случае передается переменная, во втором результат операции. И фиг его знает что там для инта наворочено

На самом деле эта ошибка со ссылкой бесит очень давно и сильно, не должно быть ее вообще.

 
A100:

А в чем разница?

Разница в том, что в первом случае ошибки нет :)
 

Есть предложения по поводу функции ArrayResize.   Нужно добавить возможность задавать параметр reserve_size равным -1, что означало бы использование предыдущего заданного значения.  Тогда не придётся хранить или таскать с собой это значение.  Достаточно будет вначале отресайзить с нужным резервом, и потом уже не беспокоиться об этом.  Иначе постоянные неудобства, когда передаёшь массив в какую-то функцию, которая ресайзит его, но ничего не знает о предустановленном на нём резерве, и в результате сбивает его, что приводит потом к лишним переаллокациям памяти.  Ведь я так понимаю, это значение где-то хранится для массива. Или нет?

 
Alexey Navoykov:
А разве текущий 0 не так работает?
 
Комбинатор:
А разве текущий 0 не так работает?

Ну по идее это означает нулевой резерв. А лишняя память наверно утилизируется.  Вообще там много неясностей с этим, мы не можем узнать реальный размер выделенной памяти под массив, чтоб проверить это и оптимизировать работу.

 
Или вот допустим такой случай.  Сначала ArrayResize(arr, 10, 100);   Потом ArrayCopy(arr, arr2, 0, 0, 20);   Уменьшится ли размер зарезервированной памяти под массив?