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

 
TheXpert:
нет щас никакой концепции, объект и указатель на него смешаны в одну кучу

Это как раз и дает возможность оперировать с указателями как с объектами, что дает в ряде случаев более простую и понятную запись без *

и кроме того такие указатели можно использовать как ссылки

А сейчас предлагается все это разрушить и вернуться в каменный век непонятно ради чего

 
A100:

А сейчас предлагается все это разрушить и вернуться в каменный век непонятно ради чего

ну это ваше мнение. я считаю ровно наоборот

 
TheXpert:

ну это ваше мнение. я считаю ровно наоборот

А что конкретно Вас не устраивает? Что в MQL указатель это фактически ссылка? При том что в MQL адресная арифметика лишена смысла и потому не используется!?
 

A100:
А что конкретно Вас не устраивает? Что в MQL указатель это фактически ссылка?

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

При том что в MQL адресная арифметика лишена смысла и потому не используется!?

у умных указателей тоже нет адресной арифметики, но ими почему-то пользуются
 
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;  // Нет ошибки
Причина обращения: