SORU
11 EKİM 2012, PERŞEMBE


C 03 arasındaki fark atmak() 11 noexcept belirtici C

Derleme zamanı ve çalışma zamanı sırasıyla kontrol ediliyor throw() noexcept Diğer arasındaki fark apart var mı ?

Wikipedia C 11 madde C 03 atmak belirteçleri itiraz ediyor.
Neden bu kadar, noexcept tüm karşılamak için yeterince yetenekli derleme zamanında ?

[Not: this question this article, ama var olamaz admin sağlam bir sebep.] anılacaktır

CEVAP
11 EKİM 2012, PERŞEMBE


Durum belirteçleri exception specifiers are generally a terrible idea çünkü kaldırılmıştır. noexcept özel durum belirtici oldukça yararlı bir faydası yok çünkü eklendi: fonksiyon bilmekolmazbir özel durum. İkili bir seçim olur böylece: atar işlevleri ve atmak olmaz işlevleri.

noexcept noexcept daha güçlü olduğu için belirteçleri throw() dışındaki atmak çıkarmak yerine daha eklendi. noexcept-derleme bir boolean içine gideren bir parametre olabilir. Eğer boolean true ise noexcept sopa. Eğer boolean false ise noexcept işlevi atabilir ve sopa yok.

Böylece, böyle bir şey yapabilirsiniz:

struct<typename T>
{
  void CreateOtherClass() { T t{}; }
};

CreateOtherClass istisna atacak mı? Olabilir, T'In varsayılan yapıcı olabilir. - Nasıl anlayacağız? Bu gibi:

struct<typename T>
{
  void CreateOtherClass() noexcept(is_nothrow_default_constructible<T>::value) { T t{}; }
};

Böylece, CreateOtherClass() ıff verilen türünün varsayılan kurucuyu atar ıff atmak olacaktır. Bu durum belirteçleri ile önemli sorunlardan biri düzeltmeler: çağrıyı yaymak için kendi yetersizlik yığını.

throw() ile bunu yapamazsın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Gavin Hoey

    Gavin Hoey

    21 Aralık 2007
  • MattSteffanina 2

    MattSteffani

    28 Kasım 2007
  • Simon Hayter

    Simon Hayter

    20 HAZİRAN 2010