Errori, bug, domande - pagina 2326

 
TheXpert:
non c'è un concetto ora, un oggetto e un puntatore ad esso sono mischiati in un mucchio

Questo permette ai puntatori di essere gestiti come oggetti, che in alcuni casi dà una notazione più semplice e chiara senza *

e tali puntatori possono anche essere usati come riferimenti

E ora propongono di distruggere tutto e tornare all'età della pietra per il bene di non si sa cosa

 
A100:

E ora propongono di distruggere tutto e tornare all'età della pietra per chissà cosa.

Beh, questa è la tua opinione. Io penso esattamente il contrario.

 
TheXpert:

Beh, questa è la tua opinione, io penso esattamente il contrario.

Cosa non ti piace esattamente? Che un puntatore in MQL è in realtà un riferimento? E l'aritmetica degli indirizzi in MQL non ha senso, e quindi non viene usata!
 

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

In realtà non è vero.)

Mentre in MQL l'aritmetica degli indirizzi non ha senso e quindi non si usa!?

Anche gli smart pointer non hanno l'aritmetica degli indirizzi, ma sono usati per qualche motivo
 
TheXpert:

in realtà non lo è)

Anche gli smart pointer non hanno l'aritmetica degli indirizzi, ma sono usati per qualche motivo

In senso stretto, no, ma in assenza di aritmetica degli indirizzi, un pointerwriter MQL è più vicino (o almeno non più lontano) a un riferimento C++ di un puntatore C++

E se è così, la sintassi deve essere conservata di conseguenza (senza *)

 
Ilyas:

No, non c'erano motivi seri.

L'unica giustificazione per la sua assenza è quella di prendersi cura delle fragili menti degli utenti che non hanno familiarità con C++.

 
A100:

In senso stretto, non lo è, ma in assenza di aritmetica degli indirizzi il puntatore/mQL è più vicino (o almeno non più lontano) a un riferimento C++ che a un puntatore C++

E se è così, la sintassi dovrebbe essere memorizzata di conseguenza (senza *)


 
A100:

Perché renderlo così complicato? È sufficiente rendere . e -> equivalenti, record intercambiabili

In senso figurato.

Se li rendi intercambiabili, semplicemente non hai bisogno di entrambi.

In C++, questo è possibile:

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();  //
 

L'operatore -> dovrebbe davvero essere aggiunto al linguaggio, in primo luogo per la compatibilità con i codici C++ e in secondo luogo per permettere l'overloading (che è utile per i puntatori intelligenti).

Il punto è un operatore universale in MQL.

 

Perché MQL non ha risolto il bug per cui una classe base viene implicitamente castata in una classe derivata? Nemmeno un avvertimento del compilatore!

class A {  };

class B : public A { };

A a;

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