2016-07-19 12 views
-2

Ich suche nach dem genauen Grund, warum diese Konvertierung eine Warnung auf C++, aber nicht auf c gibt. hängt das mit der Tatsache zusammen, dass C++ ein starker Typ und c ein schwacher Typ ist? ist es, weil der Typ in c während des Betriebs ermittelt werden kann, so dass die Kompilierung keine Warnung anzeigt? danke.Warum gibt das Konvertieren von Double in Int in C++ eine Warnung?

+2

Es ist nur, weil Sie ** verlieren ** Daten, die Dezimalstellen. Also für "Offensichtliche logische Fehler" gibt es Warnungen. Und ich nehme an, du meintest Visual Studio. –

+0

'c ist schwach Typ' Was macht Sie so denken ?? – dxiv

+0

Können Sie ein konkretes Beispiel geben? 'int x = 1.0;' gibt standardmäßig keine Warnung für eine der beiden Sprachen aus. Welchen Compiler benutzen Sie usw.? –

Antwort

10

Das Vorhandensein oder Fehlen einer Warnung bei einer Konvertierung von double zu int hat nichts mit irgendeinem Unterschied zwischen C und C++ zu tun.

Eine Warnung (und Sie haben uns nicht gesagt, wie die Warnung aussieht; bitte aktualisieren Sie die Frage mit dieser Information) ist wahrscheinlich gültig. Wenn der abgeschnittene Wert double außerhalb des darstellbaren Bereichs von int liegt, ist das Verhalten nicht definiert. Wenn es innerhalb des Bereichs liegt, aber mathematisch nicht gleich einer Ganzzahl ist, verliert die Umwandlung Informationen.

Einige Compiler warnen vor solchen Dingen, andere nicht - und ein bestimmter Compiler gibt möglicherweise eine Warnung aus, je nachdem, welche Optionen Sie angeben.

+0

danke für der Kommentar. Ich benutze den neuesten gcc, aber meine Frage ist theoretisch. Warum zeigt der c-Compiler keine Warnung an? – Pelegyair

+1

@Pelegyair: Es gibt keinen theoretischen Grund; genau dieselben Überlegungen gelten für C und C++. Sie sehen ein Symptom (eine Warnung von Ihrem C++ - Compiler, aber nicht von Ihrem C-Compiler). Bitte aktualisieren Sie Ihre Frage erneut mit Informationen zu den von Ihnen verwendeten Compilern. –

+1

Minor: "Wenn der doppelte Wert außerhalb des darstellbaren Bereichs von' int' "liegt -> ist der Bereich _sightly_ größer. Beispiel: -2147483648.999 ... bis 2147483647.999 ... – chux

Verwandte Themen