Frage zum Tippen - Seite 7

 
Dmitry Fedoseev:

Was für ein Problem die Menschen haben))) Ich werde ein langes Leben leben!

Übrigensist es viel einfacher, d=array[5].to_double() zu schreibenalsd=(double)array[5] Nur ein Punkt zum Drücken. Aber wir suchen nicht nach einfachen Wegen.

Warum schreiben Sie d=(double)array[5]? Das ist der Sinn der Sache - sich nicht mit diesen Kleinigkeiten herumzuschlagen. Hier ist ein Stück echter Code:

MYCRTMFLT(i+1, chart[MYSEG(MYSCNT-i).start].time,
               chart[MYSEG(MYSCNT-i).start].price,
               chart[MYSEG(MYSCNT-i).top].time,
               chart[MYSEG(MYSCNT-i).top].price, 
               chart[MYSEG(MYSCNT-i).top].price>chart[MYSEG(MYSCNT-i).start].price?
                 MYCLRUP : MYCLRDOWN, STYLE_SOLID, true);

chart[index] returns struct {price; time} Und warum füge ich immer wieder .time/.price hinzu, wenn man es in den meisten Fällen aus dem Kontext heraus verstehen kann? Ja, manchmal muss man nachfragen (wie in der vorletzten Zeile), aber in den meisten Fällen wird das Leben einfacher und man muss weniger schreiben.

 
Dmitry Fedoseev:

Was für ein Problem die Menschen haben))) Ich werde ein langes Leben leben!

Übrigensist es viel einfacher, d=array[5].to_double() zu schreibenalsd=(double)array[5] Nur ein Hinweis. Aber wir suchen nicht nach einfachen Wegen.

Ja, natürlich, man muss zwangsläufig d=(double)array[5] schreiben, wenn man schon bei der Kompilierung weiß, dass d nichts anderes als double sein kann. Die Mäuse weinten und bettelten, aber sie bissen weiter in den Kaktus...

 
Ilya Malev:

Ja, natürlich, es ist obligatorisch, d=(double)array[5] zu schreiben, wenn schon beim Kompilieren bekannt ist , dass d nichts anderes als double sein kann... die Mäuse weinten und bettelten, aber nagten weiter am Kaktus...

In C++ überladen sie Oregatog<=> für d, nagen und weinen nicht ;-)

PS/ und in Anbetracht der Assoziativität und der Prioritäten ist der << Operator besser geeignet
 
pavlick_:

Warum schreiben Sie d=(double)array[5]? Das ist der Sinn der Sache - sich nicht mit diesen Kleinigkeiten herumzuschlagen. Hier ist ein echtes Codefragment:

chart[index] gibt struct {price; time} zurück. Und warum füge ich ständig .time/.price hinzu, wenn wir es in den meisten Fällen aus dem Kontext verstehen können? Ja, manchmal muss man nachfragen (wie in der vorletzten Zeile), aber in den meisten Fällen wird das Leben einfacher und man muss weniger schreiben.

Der Programmierer beabsichtigt, (double) zu überladen, damitarray[5] die Zahl double und nicht ein Objekt zurückgibt. Ist es nicht so?

Wo ist dieser Kontext in dem gegebenen Beispiel, wo wir ihn verstehen können? Handelt es sich um den Parametertyp MYCRTMFLT? Dies ist eine Überladung des Typs des Rückgabewerts.

 
fxsaber:

Wenn Sie es wirklich wollen, können Sie dies tun

usw.

 _W(Color)[2] = (uchar)230;              // Записали по смещению 2 значение (uchar)230.
  PRINT(Color)                           // Убедились, что Color теперь C'241,248,230'
Ist es nicht dasselbe wiePrint(ColorToString(Color&(uint(-1)&65535)|(230<<16)); ?

Ich habe Angst, dass ich mir das Hirn zermartere, wenn ich Ihre Codes weiter studiere.

Ich meine, dass alles an Ihren Methoden bewundernswert ist (kein Scherz), außer der Fülle von Großbuchstaben mit Unterstrichen und Kontextauflösungsoperationen:)

Ich denke, dass, wenn sie (die Operation einer Kontextauflösung) überlastet werden darf, Sie zusammen mit Ihren Bibliotheken ins Astraleum gehen werden :lol:

 
Maxim Kuznetsov:

PS/ und aufgrund der Assoziativität und der Prioritäten den << Operator als den geeigneteren verwenden

Ehrlich gesagt, ist mir das auch aufgefallen. Überladen Sie << mit >> und leiden Sie nicht darunter. Aber das macht es nicht überflüssig, das Überladen von T() zu erlauben.

 
Dmitry Fedoseev:

So wie ich es verstehe, werden sie es hier überladen, so dassarray[5] nicht irgendein Objekt, sondern eine Zahl double zurückgeben würde. Ist es nicht so?

Wo in diesem Beispiel ist dieser Kontext zu verstehen? Handelt es sich um den Parametertyp MYCRTMFLT? Dies ist eine Überladung des Typs des zurückgegebenen Wertes.

Ich sehe da überhaupt kein Problem:

double d;
d = chart[i];  // call operator double

void f(datetime t);
f(chart[i]);  // call operator datetime

Das Makro wird entweder mit einem Bezeichner oder einem Funktionsaufruf enden, und der Compiler wird verstehen, was von ihm erwartet wird. Und wenn das nicht der Fall ist (Kompilierfehler mit Fluchen auf Mehrdeutigkeit), dann können Sie immer noch nachhelfen: chart[i].price

 
Ilya Malev:

Ja, natürlich, man muss zwangsläufig d=(double)array[5] schreiben, wenn man schon beim Kompilieren weiß, dass d nichts anderes als double sein kann... die Mäuse weinten und weinten, aber nagten weiter am Kaktus...

Neben d gibt es noch etwas anderes mit dem Namen array.

Es ist gar nicht schlecht, wenn der Compiler vor der Zuweisung ungeeigneter Typen warnt. Wir sollten dem Compiler zeigen, dass diejenigen, die diesen Code geschrieben haben, die volle Verantwortung für das Ergebnis übernehmen, damit sie sich später nicht über das Fehlen der vom Compiler erzeugten Warnungen beschweren.

 
pavlick_:

Ich sehe da überhaupt kein Problem:

...

Ich weiß es auch nicht.
 
Dmitry Fedoseev:

Es ist gar nicht schlecht, dass der Compiler vor der Zuweisung ungeeigneter Typen warnt. Wir müssen dem Compiler zeigen, dass diejenigen, die dies geschrieben haben, die volle Verantwortung für das Ergebnis übernehmen, damit sie sich später nicht über fehlende Warnungen des Compilers beschweren.

Nur dann nicht, wenn er selbst die Methode operator double(){...} für diese Zuweisung definiert hat, natürlich nicht, um später (double) hinter eine Variable vom Typ double schreiben zu können oder eine Warnung des Compilers zu erhalten.

Im Allgemeinen dreht sich die Diskussion offensichtlich im Kreis, hoffen wir, dass das Überladen von Typen irgendwann erlaubt wird. Ich persönlich hätte nichts dagegen, wenn ich zur Aktivierung irgendwo in den Optionen ein Häkchen setzen und bestätigen würde, dass ich damit einverstanden bin, die volle Verantwortung für das Ergebnis zu übernehmen".

Grund der Beschwerde: