Frage

Kann mir jemand sagen, was dieser Besetzung für Wirkung hat (neben happyNumber bis 1337 Einstellung), wenn überhaupt, und wenn es keine andere Wirkung hat, wie kommt es ich Code wie diesen schreiben kann ??? Ist das ein Compiler Fehler, oder einige "versteckt Feature" von C ++?

int happyNumber = static_cast<int>(123.456, TRUE, "WTF" , false , "IS" , NULL , "GOING" , 0xff , "ON???" , 1337);

Ich war überrascht, dass das überhaupt zusammenstellen würde. Ich fand es durch einen Fehler, wo ich zufällig den zweiten Parameter auf etwas festgelegt, die in einem Funktionsaufruf des Ausdrucks Wurfs gehen gemeint war. Dies führte zu einem fiesen Bug, bei dem das Objekt aus dem zweiten Parameter gegossen wurde, die Funktion mit nur einem Argumente aufrufen. Es zusammengestellt ... Und zunächst nicht boomen ...

Ich bin mit Microsoft Visual C ++ 2008.

War es hilfreich?

Lösung

Statische Besetzung nimmt ein Argument, aber ihr Argument ist ein Ausdruck, und Ausdrücke können die Komma-Operator . Comma wird in Situationen, in denen Sie zwei für ihre Nebenwirkungen auf einmal oder mehr Ausdrücke auswerten mögen, z.

int i, j;
for (i=0, j=0; i < 10; i++,j++) {
    // do stuff
}

Es ist etwas nützlich, weil ohne sie nur ein Ausdruck für je Initialisierungsstab, Zustand beurteilen konnte, und weiter Teile der for-Schleife (oder jedem anderen Ort ein Ausdruck erwartet wird). Es ist in der Regel nicht für den klarsten Code machen, aber, und die Semantik sind ungerade. Wie Sie beobachtet, wertet eine durch Kommata getrennte Sequenz auf den Wert des letzten Ausdrucks.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top