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

  • Kap Slap

    Kap Slap

    8 Mart 2010
  • Pituvision

    Pituvision

    11 Mart 2006
  • Sam Kear

    Sam Kear

    14 Temmuz 2007