Fehler, Irrtümer, Fragen - Seite 2325

 
Ilyas:
Gab es gute Gründe, den Betreiber aufzugeben ->?
 
TheXpert:
Gab es ernsthafte Gründe, den Betreiber aufzugeben ->?

Nein, es gab keine schwerwiegenden Gründe.

Die einzige Rechtfertigung für ihr Fehlen ist die Sorge um die unreifen Gemüter von Benutzern, die mit C++ nicht vertraut sind.

 
fxsaber:

Wird die doppelte Negation vom Compiler optimiert?

Ja, das tut sie.

 
Ilyas:

Nein, es gab keine schwerwiegenden Gründe.

Die einzige Rechtfertigung für ihr Fehlen ist die Rücksichtnahme auf die empfindlichen Gemüter von Benutzern, die mit C++ nicht vertraut sind.

Ich glaube nicht, dass etwas Schlimmes passieren wird, wenn Sie es hinzufügen.

Sie können die Verwendung eines Punktes mit Zeigern erlauben, wenn es für einige Zeit keine Mehrdeutigkeit gibt.

Und natürlich eine Warnung aussprechen.


 
Wie kann ich den Produkten auf dem Marktplatz eine Schaltfläche hinzufügen: "Testversion herunterladen"?
 
Koldun Zloy:

Ich glaube nicht, dass etwas Schlimmes passieren wird, wenn Sie es hinzufügen.

Eine Zeit lang kann es erlaubt sein, einen Punkt mit Zeigern zu verwenden, wo es keine Mehrdeutigkeit gibt.

Und natürlich eine Warnung aussprechen.

Warum sollte man es so kompliziert machen? Das reicht aus, um . und -> zu gleichwertigen, austauschbaren Datensätzen zu machen.

Bildlich gesprochen

#define ->   .
 
fxsaber:

Ja, in Ihrem Fall liegt eine Unklarheit vor. Eigentlich sollte es zumindest eine Compilerwarnung für diese Art von Dingen geben.

In meinem Fall, der viel einfacher ist, ist alles klar. Ich denke, C++ ist ebenfalls dieser Meinung.

Was ich meine, ist, dass MQL in meinem Fall Option (2) impliziert, während C++ Option (1) impliziert. D.h. Sie haben imaginäre Klarheit - eine kleine Änderung (der Klasse A) und die Bedeutung ändert sich dramatisch
 
A100:
Sie haben imaginäre Klarheit - eine kleine Änderung (der Klasse A) und die Bedeutung ändert sich dramatisch

Dies ist eine Änderung an der Klasse und sollte zu einer entsprechenden Compiler-Meldung führen.

Wenn das nicht der Fall ist, ist es völlig klar.

 
Ilyas:

Als Übergangslösung können Sie den Operator '!' verwenden. (logisch nicht).
Wir werden über eine Lösung nachdenken (können wir das Verhalten jetzt ändern, wo es eine Menge Code gibt?)
Es ist möglich, dass bei einem Zeiger eine bool-Konvertierungsoperation eine Operation am Zeiger und nicht am Objekt, auf das er zeigt, ist.

Ohne die bestehenden Codes zu ändern, wird es nicht funktionieren... Das gesamte Konzept von Zeigern als dynamische Objekte bricht zusammen

Ich meine, anstatt einfach zu schreiben

class A {
public:
        bool operator*( A* a ) { return true; }
};
void OnStart()
{
        A *a, *b;
        if ( a * b );  //(1)
}

müssen wir einen verwirrenden Text schreiben.

        if ( *a * *b );//(2)

Und wozu das alles? Damit ein Zeiger auf NULL geprüft werden kann? - Hierfür gibt es einen Vergleichsoperator:

        if ( a != NULL );//(3)

Warum es duplizieren?

 
A100:

das gesamte Konzept von Zeigern als dynamische Objekte zusammenbricht

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