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

 
TheXpert:

вообще-то это не так )

у умных указателей тоже нет адресной арифметики, но ими почему-то пользуются

Строго говоря - нет так, но в отсутствии адресной арифметики указатель\описатель MQL ближе (или по крайней мере не дальше) к С++ ссылке чем к С++ указателю

А раз так, то и синтаксис должен быть сохранен соответствующий (без *)

 
Ilyas:

Нет, серьёзных причин не было.

Единственное оправдание его отсутствия - это забота о неокрепших умах пользователей, не знакомых с C++.

 
A100:

Строго говоря - нет так, но в отсутствии адресной арифметики указатель\описатель MQL ближе (или по крайней мере не дальше) к С++ ссылке чем к С++ указателю

А раз так, то и синтаксис должен быть сохранен соответствующий (без *)


[Удален]  
A100:

Зачем так усложнять? Вполне достаточно сделать . и -> равноценными, взаимозаменяемыми записями

Образно говоря

Если сделать их взаимозаменяемыми, тогда они оба просто не нужны.

В C++ возможно такое:

class A
{

public:
   void f();
};

class PtrA
{
  A* mPtr;

public
   PtrA( A* a ) : mPtr( a ){}

   A* operator->()
   {
      return mPtr;
   }

   void f();
};

PtrA a( new A );

a.f();   //  Это две разные функции
a->f();  //
 

Оператор -> действительно стоило бы добавить в язык, во-первых с целью совместимости с кодами C++, а во-вторых для возможности его перегрузки (это удобно для умных указателей).

Но не равноценным точке, разумеется.  Точка - это универсальный оператор в MQL.

 

Почему в MQL до сих пор не исправлен баг, что базовый класс неявно приводится к производному классу?  Даже предупреждения компилятора нет!

class A {  };

class B : public A { };

A a;

B* b= &a;  // Нет ошибки
 
Alexey Navoykov:

Почему в MQL до сих пор не исправлен баг, что базовый класс неявно приводится к производному классу?  Даже предупреждения компилятора нет!

Наверное, из-за этой правильной конструкции

class A {  };

class B : public A { };

A* a;

B* b= a;  // Нет ошибки

не учли Вашу.

 
fxsaber:

Наверное, из-за этой правильной конструкции

не учли Вашу.

Это точно такая же неправильная конструкция.
 
Alexey Navoykov:
Это точно такая же неправильная конструкция.

Если за указателем на базовый класс стоит объект производного, то это замечательная конструкция.

 
fxsaber:

Если за указателем на базовый класс стоит объект производного, то это замечательная конструкция.

Предлагаю не спорить, а просто поверить мне, что это ошибка.