SORU
14 AĞUSTOS 2013, ÇARŞAMBA


Neden liste başlatma (kıvırcık parantez kullanarak) alternatifler daha iyi?

MyClass a1 {a};     // clearer and less error-prone than the other three
MyClass a2 = {a};
MyClass a3 = a;
MyClass a4(a);

Neden?

Benzeri bir cevap bulamadım, bana kendi soruma cevap vereyim.

Bazı insanlar bunu yararlı bulacağını umuyorum!

CEVAP
14 AĞUSTOS 2013, ÇARŞAMBA


Temelde kopyalama ve Bjarne Stroustrup bu yapıştırma"C Programlama Dili 4ncü":

Liste başlatmadaralma (§ıso.izin vermiyor 8.5.4). Yani:

  • Bir tamsayı olamaz değerini tutan başka bir tamsayıya dönüştürülemez. Örneğin, char int için izin verilir, ama char int değil.
  • Bir kayan nokta değeri dayanamayacak kayan nokta, başka bir türe dönüştürülemez değer. Örneğin, çift yüzer izin, kayar çift değil.
  • Bir kayan nokta değeri bir tamsayı türüne dönüştürülemez.
  • Bir tamsayı, kayan nokta türü için dönüştürülemiyor.

Örnek:

void fun(double val, int val2) {

    int x2 = val; // if val==7.9, x2 becomes 7 (bad)

    char c2 = val2; // if val2==1025, c2 becomes 1 (bad)

    int x3 {val}; // error: possible truncation (good)

    char c3 {val2}; // error: possible narrowing (good)

    char c4 {24}; // OK: 24 can be represented exactly as a char (good)

    char c5 {264}; // error (assuming 8-bit chars): 264 cannot be 
                   // represented as a char (good)

    int x4 {2.0}; // error: no double to int value conversion (good)

}

sadeceauto tip almak için anahtar kelime kullanarak başlatıcı tarafından belirlenir. zaman = tercih içinde bulunduğu durum {}

Örnek:

auto z1 {99}; // z1 is an initializer_list<int>
auto z2 = 99; // z2 is an int

Sonuç

{} Tercih etmesi güçlü bir nedeniniz yoksa başlatma üzerinde alternatifler.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • itfigueres

    itfigueres

    12 EKİM 2013
  • TantalizingTrance

    TantalizingT

    15 ŞUBAT 2009
  • The Platform

    The Platform

    14 HAZİRAN 2006