SORU
24 NİSAN 2015, Cuma


Düzgün modern C değişkenleri (C 11 ve üzeri), kullanarak başlatılıyor () veya {}?

C reference pages demek ki değeri için hazırlama, {} değer ve liste hazırlama toplamak. Şimdi değeri başlatma istiyorsanız, hangisini kullanabilirim? () veya {}? Soruyorum çünkü kitap "Bir Tur C" ile Bjarne kendini, kendini öyle tercih kullanarak {} için bile değer başlatma (örneğin bakınız Sayfa 6 ve 7) ve bu şekilde sanıyordum, iyi uygulama için her zaman {} için bile değer başlatma.AncakKötü aşağıdaki hata son zamanlarda tarafından ısırıldım. Aşağıdaki kodu göz önünde bulundurun.

auto p = std::make_shared<int>(3);
auto q{ p };
auto r(p);

Derleyici (Visual Studio 2013) Türüne göre std::initializer_list<std::shared_ptr<int>> hangi niyetim yok artık. Ben aslında q amaçlanan şey aslında r nedir, std::shared_ptr<int>. Bu durumda, o yüzden gitmeliyimdeğil{} kullanım değeri başlangıcı için, ama kullanın (). Bu yüzden kitabında Bjarne hala kullanmayı tercih görünüyor {} değeri için başlatma? Örneğin, Sayfa 6 altında double d2{2.3} kullanıyor.

Kesin benim soruları cevaplamak için kullanmalıyım ve ne zaman kullanmalıyım {}? Ve sözdizimi doğruluğu ya da uygulama programlama iyi meselesi değil mi?

Mümkünse Oh ve ah, düz İngilizce lütfen.

EDİT: Biraz yanlış yaptım galibadeğeri hazırlama(cevaplar aşağıda). Ancak yukarıdaki sorular hala büyük duruyor.

CEVAP
24 NİSAN 2015, Cuma


Bu benim görüşüm.

Tür belirleyici olarak auto kullanırken, daha temiz kullanmak için:

auto q = p;   // Type of q is same as type of p
auto r = {p}; // Type of r is std::initializer_list<...>

Açık tür belirleyici kullanırken, daha iyi () yerine {} kullanmak için.

int a{};   // Value initialized to 0
int b();   // Declares a function (the most vexing parse)

Demezsim

int a = 0; // Value initialized to 0

Ancak, form

int a{};

değer için kullanılabilir başlatma nesneleri kullanıcı tanımlı türler de var. E. g.

struct Foo
{
   int a;
   double b;
};


Foo f1 = 0;  // Not allowed.
Foo f1{};    // Zero initialized.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Canceriansoul

    Canceriansou

    15 Ocak 2011
  • Paulo Bautista

    Paulo Bautis

    21 Aralık 2008
  • Ralph Phillips

    Ralph Philli

    5 Aralık 2006