C++11 und Narrowing
-
Vielen Dank! Ich denke dass sagt alles
Mir ging es halt nur darum ein versehentliches Narrowing zu vermeiden. Mir ist ja durchaus bewusst, dass man auf eine Typenumwandlung verzichten sollte und wenn möglich gleich auf die richtigen "Typen" setzen sollte. Aber die Antwort dass es eben ein Fehler ist und gcc noch nicht "soweit" ist genügt mir völlig
Jonathan
-
http://channel9.msdn.com/Series/C9-Lectures-Stephan-T-Lavavej-Core-C-/STLCCSeries6
Da gibt's nen Abschnitt über uniform initialization, falls es dich interessiert.
-
class_1974 schrieb:
Sollte hier aber nicht mit einem Fehler bei der Übersetzung abgebrochen werden?
Das dürfte angesichts der großen Menge alten Codes, der dieses Problem aufweist, unzweckmäßig sein.
Im Übrigen ist es dem Compiler überlassen, wie auf solche Fehler reagiert wird. Der Standard verlangt lediglich, dass eine entsprechende Diagnosemeldung erfolgt. Und die liegt ja vor.
-
camper schrieb:
Das dürfte angesichts der großen Menge alten Codes, der dieses Problem aufweist, unzweckmäßig sein.
Alter Code nutzt nicht diese Syntax.
-
Edit: Hier stand Quatsch.
-
cooky451 schrieb:
Quatsch.
Nach dem Edit:
cooky451 schrieb:
Edit: Hier stand Quatsch.
krümelkacker schrieb:
camper schrieb:
Das dürfte angesichts der großen Menge alten Codes, der dieses Problem aufweist, unzweckmäßig sein.
Alter Code nutzt nicht diese Syntax.
Mit welcher Syntax willst du sonst Arrays initialisieren?
-
krümelkacker schrieb:
camper schrieb:
Das dürfte angesichts der großen Menge alten Codes, der dieses Problem aufweist, unzweckmäßig sein.
Alter Code nutzt nicht diese Syntax.
Dank euch alle für die Hilfe und den Link
Konnte man bei einem alten Code nicht schon diese Syntax verwenden:
double dval = {123.123}; // ging dass nicht schon vorher?
Bin mir aber nicht 100%ig sicher
-
class_1974 schrieb:
Konnte man bei einem alten Code nicht schon diese Syntax verwenden:
double dval = {123.123}; // ging dass nicht schon vorher?
Bin mir aber nicht 100%ig sicher
Ich bin mir da nicht mehr so sicher. Das ist eine für Aggregate zulässige Initialisierung. Allerdings ist double kein Aggregat-Typ.
Folgende Syntax ist aber definitiv neu:
double dval {123.123}; // neue C++11 Syntax
Probier die doch mal aus, ob das einen Fehler gibt oder nur eine Warnung.
-
krümelkacker schrieb:
Folgende Syntax ist aber definitiv neu:
double dval {123.123}; // neue C++11 Syntax
Probier die doch mal aus, ob das einen Fehler gibt oder nur eine Warnung.
Hier muss gar nichts konvertiert werden. Ein
double
-Literal wird einerdouble
-Variable zugewiesen.
-
Sone schrieb:
krümelkacker schrieb:
Folgende Syntax ist aber definitiv neu:
double dval {123.123}; // neue C++11 Syntax
Probier die doch mal aus, ob das einen Fehler gibt oder nur eine Warnung.
Hier muss gar nichts konvertiert werden. Ein
double
-Literal wird einerdouble
-Variable zugewiesen.Ich mein doch nicht das double-Literal sondern die geschweiften Klammern worum es ja bei der beschränkten automatischen Konvertierung geht. Im alten (nicht C++11)Code konnte man ja dass auch schon "so" verwenden.
-
krümelkacker schrieb:
class_1974 schrieb:
Konnte man bei einem alten Code nicht schon diese Syntax verwenden:
double dval = {123.123}; // ging dass nicht schon vorher?
Bin mir aber nicht 100%ig sicher
Ich bin mir da nicht mehr so sicher. Das ist eine für Aggregate zulässige Initialisierung. Allerdings ist double kein Aggregat-Typ.
Folgende Syntax ist aber definitiv neu:
double dval {123.123}; // neue C++11 Syntax
Probier die doch mal aus, ob das einen Fehler gibt oder nur eine Warnung.
Ok ich hab es jetzt nochmals probiert:
double dval02 = {123.123}; // geht noch mit "altem" Code double dval01 {123.123}; // pures C++11
An dieser Stelle stellt sich für mich nur noch die Frage ob im C++11-Standard die Version mit dem Zuweisungsoperator und ohne trotzdem ein und dasselbe sind
So wie ich dass verstanden habe ist es egal ob ich noch ein = verwende oder nicht?
-
Das eine ist direct-list-initialization, das andere copy-list-initialization (Edit: Die Variante mit dem Zuweisungsoperator ist copy-list-initialization!)
Für Basisdatentypen macht das natürlich keinen Unterschied, lediglich für Initialisierung von Objekten einer Klasse.
-
Sone schrieb:
Das eine ist direct-list-initialization, das andere copy-list-initialization.
Für Basisdatentypen macht das natürlich keinen Unterschied, lediglich für Initialisierung von Objekten einer Klasse.
Vielen Dank für die Info. Damit habt ihr für mich das komplette Thema "Narrowing" aufgeklärt. Seit echt toll hier