Was bedeutet casting zu `void` wirklich tun?

Eine oft verwendete Aussage wie (void)x; ermöglicht das unterdrücken von Warnungen über nicht verwendete variable x. Aber wenn ich versuche zu kompilieren, den folgenden, bekomme ich einige Ergebnisse, die ich nicht ganz verstehe:

int main()
{
    int x;
    (short)x;
    (void)x;
    (int)x;
}

Kompilieren mit g++, bekomme ich folgende Warnungen:

$ g++ test.cpp -Wall -Wextra -o test
test.cpp: In function int main()’:
test.cpp:4:13: warning: statement has no effect [-Wunused-value]
     (short)x;
             ^
test.cpp:6:11: warning: statement has no effect [-Wunused-value]
     (int)x;
           ^

So schließe ich, dass das casting zu void ist sehr Verschieden von casting zu anderen Arten, die als Ziel geben Sie die gleiche wie decltype(x) oder etwas anderes. Meine Vermutung mögliche Erklärung ist:

  • Es ist nur eine Konvention, dass (void)x; aber nicht auf die anderen wirft, wird Warnmeldungen unterdrücken. Alle Aussagen gleichermaßen haben keine Wirkung.
  • Dieser Unterschied ist irgendwie im Zusammenhang mit der Tatsache, dass void x; ist nicht eine gültige Aussage zu, während short x; ist.

Welche von diesen, wenn mehr korrekt? Wenn keine, wie kann dann der Unterschied in der compiler-Warnungen erklärt werden?

  • Es ist nur eine Konvention unter den Compiler, dass diese Besetzung unterdrückt die Warnungen. Der C++ - Standard nicht erwähnt Warnungen für "Anweisung hat keine Wirkung" an alle.
InformationsquelleAutor Ruslan | 2015-12-15
Schreibe einen Kommentar