Fehler, Irrtümer, Fragen - Seite 2326

 
TheXpert:
es gibt kein Konzept mehr, ein Objekt und ein Zeiger darauf werden in einem Haufen vermischt

Dadurch können Zeiger als Objekte behandelt werden, was in einigen Fällen eine einfachere und klarere Schreibweise ohne *

und solche Zeiger können auch als Referenzen verwendet werden

Und jetzt wollen sie alles zerstören und in die Steinzeit zurückkehren, nur um irgendetwas zu erreichen.

 
A100:

Und jetzt schlagen sie vor, alles zu zerstören und in die Steinzeit zurückzukehren, wer weiß, wofür.

Nun, das ist Ihre Meinung. Ich denke genau das Gegenteil.

 
TheXpert:

Nun, das ist Ihre Meinung, ich denke genau das Gegenteil.

Was genau gefällt Ihnen nicht? Dass ein Zeiger in MQL eigentlich eine Referenz ist? Und die Adressarithmetik in MQL macht keinen Sinn und wird daher nicht verwendet!
 

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

das ist nicht wahr )

Während in MQL die Adressarithmetik bedeutungslos ist und daher nicht verwendet wird!?

Smart Pointer haben auch keine Adressarithmetik, aber sie werden aus irgendeinem Grund verwendet
 
TheXpert:

eigentlich ist es das nicht )

Smart Pointer haben auch keine Adressarithmetik, aber sie werden aus irgendeinem Grund verwendet

Streng genommen nicht, aber in Abwesenheit von Adressarithmetik ist ein MQL-Zeiger näher (oder zumindest nicht weiter) an einer C++-Referenz als ein C++-Zeiger

Und wenn ja, muss die Syntax entsprechend beibehalten werden (ohne *)

 
Ilyas:

Nein, es gab keine schwerwiegenden Gründe.

Die einzige Rechtfertigung für sein Fehlen ist die Schonung der zarten Gemüter von Benutzern, die mit C++ nicht vertraut sind.

 
A100:

Streng genommen ist das nicht der Fall, aber in Ermangelung von Adressarithmetik ist der Zeiger/MQL-Zeiger näher (oder zumindest nicht weiter) an einer C++-Referenz als an einem C++-Zeiger

Und wenn ja, sollte die Syntax entsprechend gespeichert werden (ohne *)


 
A100:

Warum sollte man es so kompliziert machen? Es reicht, wenn . und -> gleichwertig und austauschbar sind.

Bildlich gesprochen.

Wenn man sie austauschbar macht, braucht man einfach nicht beide.

In C++ ist dies möglich:

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

Der Operator -> sollte eigentlich in die Sprache aufgenommen werden, erstens aus Gründen der Kompatibilität mit C++-Codes und zweitens, um das Überladen zu ermöglichen (was für intelligente Zeiger nützlich ist).

Der Punkt ist ein universeller Operator in MQL.

 

Warum hat MQL den Fehler nicht behoben, dass eine Basisklasse implizit in eine abgeleitete Klasse gecastet wird? Nicht einmal eine Compilerwarnung!

class A {  };

class B : public A { };

A a;

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