Dönüşüm hata denetimi iyi olarak işlev?
Bir nesne için geçerli olmak üzere denetleme gibi basit bir şekilde sahip olmak isterim. Basit bir dönüştürme fonksiyonu, şöyle bir şey düşündüm:
operator bool() const { return is_valid; }
Geçerli olmak için kontrol çok basit olurdu
// is my object invalid?
if (!my_object) std::cerr << "my_object isn't valid" << std::endl;
Bu iyi bir uygulama olarak kabul edilir?
CEVAP
C 03, safe bool idiom kötü şeyleri önlemek için kullanmanız gerekir:
int x = my_object; // this works
C 11'de açık bir dönüştürme kullanabilirsiniz:
explicit operator bool() const { return is_valid; }
Bu şekilde bool dönüşümü hakkında açık olmak gerekir, artık kaza (C hep bilerek çılgınca şeyler yapabilirsiniz) tarafından çılgınca şeyler yaparsın:
int x = my_object; // does not compile because there's no implicit conversion
bool y = bool(my_object); // an explicit conversion does the trick
Bu hala bu ifadeleri durumdur çünkü boolean bir ifade gerektirir, if
while
gibi yerlerde normal olarak çalışıyorçevreye dönüştürülürbool için:
// this uses the explicit conversion "implicitly"
if(my_object)
Bu belgelenmiÅŸtirve mezhep;4[d]:
e
edilebilir bir ifadeörtülü olarak dönüştürülmüşbir türT
Eğer ve yalnızca eğer 16* *bildirimi iyi oluşmuş. *17 geçici bir değişken*bazı icat için (&; 8.5 mezhep). Bazı dil yapıları bir ifade olmasını gerektirir Boolean değerine dönüştürülür. Bir ifadee
gibi görünmüyor içerik olduğu söyleniyoriçerikbool
dönüştürülürve iyi biçimlendirilmiş ve eğer Bildirgesibool t(e);
iyi biçimlendirilmiş ise, bazıları için ise geçici bir değişkent
(&; 8.5 mezhep) icat etti. Ya etkisi örtülü dönüşüm gerçekleştirme aynıdır beyan ve başlatma ve geçici kullanma o zaman dönüşüm sonucu olarak değişken.
(Ne fark kullanılmasıdır yapar*. *23) yerine bool t(e);
Yerler bool için bu bağlamsal bir dönüşüm olduğunu olur
if
,while
for
tabloların koşulları;- mantıksal olumsuzluk operatörleri
!
, mantıksal bağlantı&&
ve mantıksal ayırma||
; - koşullu operatörü
?:
; static_assert
; durumunoexcept
özel durum belirtici isteğe bağlı sabit ifade;
Nasıl C parametre olarak bir işlev geç...
Nasıl bir işlev adı için Python ile bi...
Tam olarak "HÄ°ERARCHY_REQUEST_ERR...
hata: '' xxx atar elemeleri ...
Almak tam bir hata olarak DbValidation...