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

 

Логическая ошибка

void f( const int  ) {}
void f( const int& ) {}
void OnStart()
{
          int i = 0; f( i ); //(1) нормально
    const int j = 0; f( j ); //(2) Error: 'f' - ambiguous call to overloaded function with the same parameters
}

А какая разница между (1) и (2) ?

 
A100:

Логическая ошибка

А какая разница между (1) и (2) ?

Вроде, в 1-м должна быть ошибка. А 2-ю можно обойти через j+0.

 
fxsaber:

Вроде, в 1-м должна быть ошибка. А 2-ю можно обойти через j+0.

А зачем лишняя арифметическая операция? если обойтись можно и без нее:

        const int j = 0; f((int)j);
 
A100:

А зачем лишняя арифметическая операция?

Ее не будет после компиляции.

 
fxsaber:

Ее не будет после компиляции.

Будет. Просто в общем случае ошибка при компиляции переместится в ошибку при выполнении:

void f( const int  ) { Print( 1 ); }
#define int short
//...
void f( const int  ) { Print( 2 ); }
void f( const int& ) { Print( 3 ); }
void OnStart()
{                     //Результат:
          int i = 0; f( i   );  //2
    const int j = 0; f( j+0 );  //1
}

Результат:               2:1

А в моем варианте: 2:2

void OnStart()
{                     //Результат:
          int i = 0; f( i   );  //2
    const int j = 0; f((int)j); //2
}
 
A100:

Будет. Просто в общем случае ошибка при компиляции переместится в ошибку при выполнении:

Результат:               2:1

Результат в исходнике перепутали. Не думаю, что есть сложение при выполнении. Прочто компилятор прописывает вызывает int-вую функцию для выражения. А само выражение не вычисляет.

 

Подумывал реализовать аналог итератора под С++. Но возникла печалька....


Вопрос разработчикам:
Перезагрузка какого из унарных операторов, разрешенных в MQL, предлагается в качестве best practice для реализации операции разыменования?

  • unary +,-,++,--,!,~
 
Sergey Dzyublik:

Перезагрузка какого из унарных операторов, разрешенных в MQL, предлагается в качестве best practice для реализации операции разыменования?

  • unary +,-,++,--,!,~

Офигеть, здесь на форуме есть люди которые задумываются о best practice.

Логичнее всего выглядит сдвиг, за неимением. (сорри, он параметра требует, тогда дополнение как самый редко используемый) Но получится ли нормально хоть с одним?

Максимум что можно получить это так:

(~w).F();

Придется всегда брать в скобки из-за приоритета точки.

 
Sergey Dzyublik:

Вопрос разработчикам:
Перезагрузка какого из унарных операторов, разрешенных в MQL, предлагается в качестве best practice для реализации операции разыменования?

  • unary +,-,++,--,!,~

а что хоть разыменовывать можно в MQL ? - тут даже указатели на обьекты уже разыменованы при обращении по имени указателя

ЗЫ: Вашу бы энергию да в нужное русло.... в прошлом месяце в очередной стопервый раз пытался сделать обертку класс для двухмерного массива, сколько не бился так и не получилось перегрузить [] , чтобы обращаться как к нормальному двухмерному массиву arr[1][2]  , а Вы тут про разыменование указателей в MQL...

 
Igor Makanu:

сколько не бился так и не получилось перегрузить [] , чтобы обращаться как к нормальному двухмерному массиву arr[1][2]  , а Вы тут про разыменование указателей в MQL...

бывает ))

Причина обращения: