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?
Antwort
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.
danke für der Kommentar. Ich benutze den neuesten gcc, aber meine Frage ist theoretisch. Warum zeigt der c-Compiler keine Warnung an? – Pelegyair
@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. –
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
- 1. Int konvertieren in Swift Double
- 2. konvertieren double to int
- 3. Warum gibt int = int * double einen Fehler und int * = double nicht (in Java)?
- 4. Fehler 'Kann Double nicht in Int' konvertieren
- 5. Konvertieren von Double in String in C++
- 6. Konnte 'Double (*) [5]' nicht in 'Double' konvertieren
- 7. Umwandeln eines Double in einen Int in C#
- 8. C++ Gibt double oder int von der Funktion
- 9. Konvertieren von Binärzeichenfolge in Int in C
- 10. Konvertieren von String in unsigned int gibt das falsche Ergebnis
- 11. Konvertieren von Double in char * in C++ mit hoher Performance
- 12. Konvertieren von C++ String in int
- 13. Warum gibt mir die Konvertierung von einem size_t in einen unsigned int eine Warnung?
- 14. String in Double konvertieren
- 15. Konvertieren von IntWritatble in int
- 16. Kann Clang eine Warnung ausgeben, um Double in Float umzuwandeln?
- 17. Konvertieren von String in Double - verliert Präzision
- 18. Konvertieren von Double in Float in Java
- 19. Konvertieren von char * in float oder double
- 20. Konvertieren von char in int?
- 21. Warum double in int in JSON umgewandelt wird
- 22. DStream [Double, Double] in RDD [(Double, Double)] konvertieren
- 23. Wie int [] konvertieren int [,] - C#
- 24. Konvertieren von ENUM in int
- 25. Konvertieren von Double in unsigned char?
- 26. Konvertieren von XMLSchema-Datentyp in Java-Int
- 27. Konvertieren von IO Int in Int
- 28. Konvertieren Zeichenfolge in Int Fehler in C#
- 29. Konvertieren von Str in Int in Python
- 30. Konvertieren von int in char?
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. –
'c ist schwach Typ' Was macht Sie so denken ?? – dxiv
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.? –