C++ 11 ilk olarak, kullanıcı tanımlı hazır bilgi aracılığıyla C++ içine yeni hazır bilgi tanımlamak için destek tanıttı. C++ 11 veya üstü ayrıca <cstdint>
'daki türler için sabit genişlikli tamsayı hazırlıkları için ekleri önceden tanımlar mı?C++ 'da sabit genişlikli tamsayı değişmezleri mi?
cevap
sayılı standarda göre tanımlanan C++, 14, sadece hazır ekleri arasında gibi standart kütüphane <chrono>
, <complex>
ve <string>
başlıkları ile sağlanmaktadır. <chrono>
başlık h
, min
, s
, ms
, us
, zaman süreleri için ns
ekleri, <complex>
hayali sayılar için i
, il
ve if
ekleri tanımlar tanımlar ve <string>
basic_string
hazır için s
eki tanımlar.
Ancak, bir kolaylıkla böyle kendi sabit genişlikli değişmezleri tanımlayabilirsiniz:
#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); }
Uyarı: Yukarıdaki kod sessizce yanlış sonuç verecektir unsigned long long
sığmayan değişmezleri üzerinde kullanılırsa Ayrıca, gerçek değerin istenen türden birine sığmaması durumunda, örneğin taşma 999_int8
. Bir better implementation (GPL-3 lisanslı) muhtemelen, this gibi taşma üzerine karakter karakterli karakter ve static_assert
'u ayrıştırmak zorunda kalacaktır.
Kullanıcı tanımlı değişmezleri kullanmanın dezavantajı, altkümesi olmayan soneklerin §17.6.4.3.4'e göre gelecekteki standardizasyon için ayrılmasından dolayı eklerin bir alt çizgi _
ile önekinin yapılması gerektiğidir.
- 1. Sabit genişlikli alanları toplu ekleme
- 2. Sabit genişlikli JScrollPane
- 3. Bileşik değişmezleri Standard C++?
- 4. iOS dev yerleşik sabit genişlikli yazı tipine sahip mi?
- 5. Perl'de sabit genişlikli sütunları nasıl ayırabilirim?
- 6. İthalat olmayan tamsayı sabit
- 7. C++'da std :: multiset sabit bir sıralama düzenine sahip mi?
- 8. Dizi adı C++ 'da sabit bir işaretçi mi?
- 9. Sabit genişlikli sayı biçimlendirmesi python 3
- 10. Bootstrap içindeki sabit genişlikli tablo sütunları
- 11. Unicode dize değişmezleri
- 12. nasıl Haskell ikili veya hex tamsayı değişmezleri yazdırmak için?
- 13. C++ 'da sabit bir C-string tanımlamak için doğru yolu?
- 14. Python Pandalar, DataFrame'i sabit genişlikli dosyaya yaz (to_fwf?)
- 15. Sabit genişlikli iki sütun, sağa doğru dinamik genişlikle
- 16. Sabit genişlikli bir dizede bir metin satırı nasıl ortalanır?
- 17. Python formatı Sabit uzunluklu dizelere tamsayı
- 18. "let" anahtar kelimesi sabit/değişmezleri hızla tanımlamak için kullanılırsa "statik" anahtar kelimenin kullanımı nedir?
- 19. Scala sıralama sabit mi?
- 20. uzun tamsayı okuyucular
- 21. Tamsayı türü için maksimum değer için bir sabit var mı?
- 22. Delphi'nin hata veya sınırı maks. sabit tamsayı değerleri?
- 23. İki nesne sabit olarak javascript
- 24. Pas sabit/statik C'ye maruz kalabilir mi?
- 25. C++'da Yaml Yayıcı
- 26. C++ 'da Paralel Döngüler
- 27. C++ 'da çevreler topluluğu
- 28. c tamsayı nth bayt olsun
- 29. Yuvalanmış try-catch blokları C++ 'da olabilir mi?
- 30. Bir kurucu işlevi C++ 'da bir arkadaş olabilir mi?
[Taşma konusunda bir istisna atma, derleme başarısızlığı yapma] nasıl olur (http://stackoverflow.com/a/8626450/256138)? – rubenvb