Template: Konstante 2300000000 wird zu long long
-
Hallo,
kurze Frage, weiß nicht ob es mit Visual Studio (2013) zu tun hat:
Wenn ich einer einfachen Templatefunktion die Konstante 2300000000 (2.3 Mrd.) übergebe, sehe ich, dass das Template mit "long long" erstellt wurde.
Warum nicht unsigned long/int? Ich müsste extra ein U/UL dranhängen..
Ich baue nur in 32bit.Danke schon mal!
-
Weil 2.3 Milliarden nicht in einen vorzeichenbehafteten integralen Skalar mit 32-Bit reinpassen. Die größte darstellbare Zahl wäre für einen solchen lediglich , etwa 2.1 Milliarden.
Der Standard schreibt vor dass der Typ eines dezimalen Ganzzahlliterals ohne Suffix der erste aus der folgenden Liste ist in dem der Wert vollständig gespeichert werden kann:
int long int long long int
Offensichtlich sind bei dir
int
undlong
32-Bit.
-
Arcoth schrieb:
Der Standard schreibt vor dass der Typ eines dezimalen Ganzzahlliterals ohne Suffix der erste aus der folgenden Liste ist in dem der Wert vollständig gespeichert werden kann:
int long int long long int
Offensichtlich sind bei dir
int
undlong
32-Bit.Ich will zwar gerade nicht im Standard nachschauen, aber ist die Liste nicht
int long int long long int unsigned long long int
?
-
Nein. Den einfachsten Beweis erbringt Clang:
main.cpp:3:14: warning: integer constant is larger than the largest signed integer type [-Wimplicitly-unsigned-literal]
auto i = 18446744073709551615;
-
Siehe auch hier für vollständige Liste: http://en.cppreference.com/w/cpp/language/integer_literal#The_type_of_the_literal
-
Nathan schrieb:
Siehe auch hier für vollständige Liste: http://en.cppreference.com/w/cpp/language/integer_literal#The_type_of_the_literal
... hab' vergessen dass cppreference den halben Standard bereits kopiert hat.
-
Ok, danke