C++ 11 erste Einführung zur Definition neuer Literale in C++ mittels benutzerdefinierter Literale. Definiert C++ 11 oder höher auch Suffixe für Ganzzahlenliterale mit fester Breite für Typen in <cstdint>
?Ganzzahlige Literale mit fester Breite in C++?
Antwort
No. Ab C++ 14 die einzigen literal Suffixe durch den Standard definiert sind, durch <chrono>
, <complex>
und <string>
Headern in der Standardbibliothek zur Verfügung gestellt. Der <chrono>
Header definiert die h
, min
, s
, ms
, us
, ns
Suffixe für Zeitdauern, <complex>
definiert die i
, il
und if
Suffixe für imaginäre Zahlen und <string>
definiert die s
Suffix für basic_string
Literale.
Allerdings kann man leicht ihre eigenen fester Breite Literale wie folgt definieren:
#include <cstdint>
constexpr std::int8_t operator "" _int8(unsigned long long v)
{ return static_cast<std::int8_t>(v); }
constexpr std::uint8_t operator "" _uint8(unsigned long long v)
{ return static_cast<std::uint8_t>(v); }
constexpr std::int16_t operator "" _int16(unsigned long long v)
{ return static_cast<std::int16_t>(v); }
constexpr std::uint16_t operator "" _uint16(unsigned long long v)
{ return static_cast<std::uint16_t>(v); }
constexpr std::int32_t operator "" _int32(unsigned long long v)
{ return static_cast<std::int32_t>(v); }
constexpr std::uint32_t operator "" _uint32(unsigned long long v)
{ return static_cast<std::uint32_t>(v); }
constexpr std::int64_t operator "" _int64(unsigned long long v)
{ return static_cast<std::int64_t>(v); }
constexpr std::uint64_t operator "" _uint64(unsigned long long v)
{ return static_cast<std::uint64_t>(v); }
constexpr std::int_fast8_t operator "" _int_fast8(unsigned long long v)
{ return static_cast<std::int_fast8_t>(v); }
constexpr std::uint_fast8_t operator "" _uint_fast8(unsigned long long v)
{ return static_cast<std::uint_fast8_t>(v); }
constexpr std::int_fast16_t operator "" _int_fast16(unsigned long long v)
{ return static_cast<std::int_fast16_t>(v); }
constexpr std::uint_fast16_t operator "" _uint_fast16(unsigned long long v)
{ return static_cast<std::uint_fast16_t>(v); }
constexpr std::int_fast32_t operator "" _int_fast32(unsigned long long v)
{ return static_cast<std::int_fast32_t>(v); }
constexpr std::uint_fast32_t operator "" _uint_fast32(unsigned long long v)
{ return static_cast<std::uint_fast32_t>(v); }
constexpr std::int_fast64_t operator "" _int_fast64(unsigned long long v)
{ return static_cast<std::int_fast64_t>(v); }
constexpr std::uint_fast64_t operator "" _uint_fast64(unsigned long long v)
{ return static_cast<std::uint_fast64_t>(v); }
constexpr std::int_least8_t operator "" _int_least8(unsigned long long v)
{ return static_cast<std::int_least8_t>(v); }
constexpr std::uint_least8_t operator "" _uint_least8(unsigned long long v)
{ return static_cast<std::uint_least8_t>(v); }
constexpr std::int_least16_t operator "" _int_least16(unsigned long long v)
{ return static_cast<std::int_least16_t>(v); }
constexpr std::uint_least16_t operator "" _uint_least16(unsigned long long v)
{ return static_cast<std::uint_least16_t>(v); }
constexpr std::int_least32_t operator "" _int_least32(unsigned long long v)
{ return static_cast<std::int_least32_t>(v); }
constexpr std::uint_least32_t operator "" _uint_least32(unsigned long long v)
{ return static_cast<std::uint_least32_t>(v); }
constexpr std::int_least64_t operator "" _int_least64(unsigned long long v)
{ return static_cast<std::int_least64_t>(v); }
constexpr std::uint_least64_t operator "" _uint_least64(unsigned long long v)
{ return static_cast<std::uint_least64_t>(v); }
constexpr std::intmax_t operator "" _intmax(unsigned long long v)
{ return static_cast<std::intmax_t>(v); }
constexpr std::uintmax_t operator "" _uintmax(unsigned long long v)
{ return static_cast<std::uintmax_t>(v); }
constexpr std::intptr_t operator "" _intptr(unsigned long long v)
{ return static_cast<std::intptr_t>(v); }
constexpr std::uintptr_t operator "" _uintptr(unsigned long long v)
{ return static_cast<std::uintptr_t>(v); }
Warnung: Der obige Code wird stillschweigend das falsche Ergebnis geben, wenn auf Literale verwendet, die passen nicht in unsigned long long
, sowie Überlauf, wenn der Literalwert nicht in den angeforderten Typ passt, z 999_int8
. A better implementation (GPL-3 lizenziert) würde wahrscheinlich das Literal Zeichen für Zeichen und static_assert
bei Überlauf, wie this analysieren.
Der Nachteil der Verwendung von benutzerdefinierten Literalen ist, dass die Suffixe mit einem Unterstrich _
versehen werden müssen, da Suffixe ohne den Unterstrich für zukünftige Standardisierung nach §17.6.4.3.4 reserviert sind.
- 1. Ganzzahlige Ganzzahlen mit fester Breite in C++
- 2. Erstellen einer Datei fester Breite in C#
- 3. Pandas: Histogramm mit fester Breite
- 4. Gibt es einen Bolt-Typ mit fester Breite in C++?
- 5. Importdatei mit fester Breite ohne Zeilentrennzeichen
- 6. Anreden eines Tabellenlayouts mit fester und fester Breite Spalten + Colspan
- 7. WPF-Strukturansicht mit Spalten mit fester Breite
- 8. Zwei Spalten, links mit fester Breite, rechts mit dynamischer Breite
- 9. Haben literale ganzzahlige Werte einen bestimmten Typ in Rust?
- 10. UILabel mit fester Breite und flexibler Höhe
- 11. Bootstrap-Tabelle Daten mit fester Breite
- 12. Wie html-Taste mit fester Breite wrap
- 13. Einen scrollbaren Bereich mit fester Breite erhalten
- 14. Formatbezeichner für Ganzzahlen mit fester Breite?
- 15. Datei fester Breite in ein Array lesen
- 16. C/C++ Literale
- 17. C++ ganzzahlige Stockwerksfunktion
- 18. Chopping eine Zeichenkette in einen Vektor mit fester Breite Zeichenelemente
- 19. Wie erstellt man in Android EditText mit fester Breite?
- 20. Ein Block mit fester Breite in einem Fluid-Layout
- 21. Ändern Sie eine Textdatei mit fester Breite in Begrenzte
- 22. Bootstrap Bilder mit fester Breite in 2 Spalten
- 23. Import von Textdateien mit fester Breite in mongodb
- 24. Gitter mit zu vielen Spalten in fester Breite Website
- 25. HTML-Tabelle mit Spalten mit fester Breite mit CSS erstellen
- 26. String-Literale C++?
- 27. Wie bekomme ich alle installierten Schriften mit fester Breite?
- 28. Java, mehrzeiliger Tooltip mit fester maximaler Breite, mit HTML-Tag
- 29. XML zu Textdatei mit fester Breite mit XSL-Stylesheet
- 30. Rasteransicht mit fester Breite und ansprechender Höhe (Android)
Wie wäre es mit [Ausnahmebedingung beim Überlauf, wodurch die Kompilierung fehlschlägt] (http://stackoverflow.com/a/8626450/256138)? – rubenvb