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

 
Комбинатор:
Указателю присваивается rvalue, которое потом затирается new A.

Где? Вот здесь?

 this[0] = new A;

Здесь operator[] возвращает значение, содержащееся в ячейке Data[0]. Не ссылку на эту ячейку, не указатель на неё, а просто копию содержащегося в этой ячейке значения, т.е. rvalue. Естественно, этой копии ничего присвоить нельзя. Как operator= в классе А это меняет, не пойму.

 
Sergei Vladimirov:
А я так и не понял последнего примера. Перегрузка оператора "=" в классе А превращает this[0] из rvalue в lvalue... Не могу понять, как. Это какие-то особенности МКЛ, в плюсах такого поведения нет. fxsaber, вы как, вообще, догадались до этой конструкции? Я имею в виду перегрузку = в А. Или методом тыка?
С полным пониманием делал. Иначе такое точно не написал бы

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

Библиотеки: TypeToBytes

fxsaber, 2016.09.21 21:25

Опубликован. Теперь для любой переменной (структура или стандартный тип) работает не только чтение, как с массивом, но и ЗАПИСЬ:

_W(AnyVariable)[Pos] = AnyValue; // Записывает по байтовому смещению Pos значение AnyValue в переменную AnyVariable

Догадаться до реализации было непросто - наверное, получился неплохой тест на среднее владение ООП: мне известна только классика для классов.

Если кто знает нечто похожее, поделитесь ссылкой для образования.


 
fxsaber:
С полным пониманием делал. Иначе такое точно не написал бы

Т.е. всё понимаете, а сказать не можете? )) Ясненько.
 
Sergei Vladimirov:
Т.е. всё понимаете, а сказать не можете? )) Ясненько.
Ну да, бывает такое. Не получается сформулировать. Поэтому разработчиков и прошу это грамотно сделать.
 
Sergei Vladimirov:

Где? Вот здесь?

 this[0] = new A;

Здесь operator[] возвращает значение, содержащееся в ячейке Data[0]. Не ссылку на эту ячейку, не указатель на неё, а просто копию содержащегося в этой ячейке значения, т.е. rvalue. Естественно, этой копии ничего присвоить нельзя. Как operator= в классе А это меняет, не пойму.

Наверное, тут всё дело всё в тех же замутах со ссылками в МКЛ.

A* operator []( const int Pos )
{
    return(this.Data[Pos]);
}

Как бы не оказалось, что здесь возвращается не значение, а ссылка на него, т.е. lvalue... Но тогда почему ей сразу нельзя присвоить новое значение, зачем для этого нужен operator= в классе А?.. Фиг пойми...

 
Sergei Vladimirov:

Наверное, тут всё дело всё в тех же замутах со ссылками в МКЛ.

Как бы не оказалось, что здесь возвращается не значение, а ссылка на него, т.е. lvalue... Но тогда почему ей сразу нельзя присвоить новое значение, зачем для этого нужен operator= в классе А?.. Фиг пойми...

Да, всё дело именно в особенностях MQL.  Когда ты присваиваешь что-либо rvalue-указателю, то происходит автоматическое приведение этого указателя к ссылке на объект.  Чё-то все прям как вчера родились!

Вообще что касается возврата значения функции по ссылке - очень бы хотелось иметь такую возможность в MQL.  Я уже давно прошу об этом в сервис-деске.  Но они упираются, мол это небезопасно. Хотя по факту это ничуть не опасней, чем передача аргументов по ссылке.

 
Alexey Navoykov:

Да, всё дело именно в особенностях MQL.  Когда ты присваиваешь что-либо rvalue-указателю, то происходит автоматическое приведение этого указателя к ссылке на объект.  Чё-то все прям как вчера родились!

Теперь понятно, спасибо.
 
Не хватает возможности выделить в Ленте строчку(-и). Смотреть могу, а сделать выделенной - нет.
 
Что за фигня?
2016.09.26 14:02:11.858 Books   invalid book item[RTS-12.16,buy,98090.00000,-16]
 

Несоответствие типов

MqlTick time_msc - long.

CopyTicks  from - ulong.