Farklı tamsayı türleri arasında dönüştürmek istediğiniz, en iyi sözdizimi boost::numeric_cast<>()
kullanmaktır görünüyor:kullanma boost :: numeric_cast <>
int y = 99999;
short x = boost::numeric_cast<short>(y); // will throw an exception if y is too large
Bunu hiç kullanılmamış; ancak sözdizimi oldukça basit, bu yüzden her şey yolunda.
Şimdi biraz daha gelişmiş bir şey yapmak istediğimi varsayalım: bir istisna atmak yerine, hedef türün (doygunluk) min veya maksimum değerini döndürmesini istiyorum. Bunu ifade etmenin bir yolunu anlayamadım, ancak documentation bunun mümkün olduğunu (muhtemelen RawConverter
ilkesini kullanarak) önerir. Ben ile gelebilir tek şey çirkin aşağıdadır:
short x = numeric_cast<short>(max(min(y, SHORT_MAX), SHORT_MIN);
Peki nasıl boost en numeric_cast
kullanarak bir "cast doyurarak" ifade edebilir
İstisna bağlı :(Bazı projeler C++ istisnası kullanmaz, bunu hatırlamak iyi .. BTW: İmzalı/imzasız bir döküm için hala çalışır mı? – Kos
@Kos: Bir proje tüm dil özelliklerini kullanmıyorsa, Bu projenin problemi: Kimse, bazı özellikleri kullanmayan bir dil için kod yazmamalı çünkü bir başkası bu özellikten hoşlanmayabilir .. – Puppy
İstisnalar, tüm avantajlarının yanı sıra, kontrol akışını daha karmaşık hale getiriyor ve aynı zamanda genel giderler de getiriyor. "kodlama standardı" denir, buna "kodlama standardı" denir. Birçok (hepsi değil, ofc) C++ projelerinin istisnasız var olmak için iyi nedenleri vardır ve bunlar istisna desteği olmadan derlenirler. – Kos