Dönüşüm hata denetimi iyi olarak işlev? | Netgez.com
SORU
5 HAZÄ°RAN 2011, Pazar


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
5 HAZÄ°RAN 2011, Pazar


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ür T 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 ifade e gibi görünmüyor içerik olduğu söyleniyoriçerik bool dönüştürülürve iyi biçimlendirilmiş ve eğer Bildirgesi bool t(e); iyi biçimlendirilmiş ise, bazıları için ise geçici bir değişken t (&; 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; durumu
  • noexcept özel durum belirtici isteÄŸe baÄŸlı sabit ifade;

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • ★ByScrapi★ Designs

    ★ByScrapiâ

    27 AÄžUSTOS 2013
  • MysteryGuitarMan

    MysteryGuita

    16 HAZÄ°RAN 2006
  • Semantic Mastery

    Semantic Mas

    30 EKÄ°M 2013