SORU
12 NİSAN 2011, Salı


Parametre listesi ortasında varsayılan argüman?

Şöyle baktım bizim kodda bir işlev bildirimi gördüm

void error(char const *msg, bool showKind = true, bool exit);

Bu fonksiyonları ortasında varsayılan argüman olamaz çünkü bir hata olduğunu, ancak derleyici bu Bildirgeyi kabul eden ilk sanıyordum. Kimse bunu daha önce gördün mü? GCC4 kullanıyorum.5. Bu GCC uzantısıdır?

Garip olan şu ki, bu ayrı bir dosyaya çıkar ve derlemeye çalışırsanız, GCC reddeder. Çift kişilik her şey, derleyici kullanılan seçenekler de dahil olmak üzere kontrol ettim.

CEVAP
12 NİSAN 2011, Salı


Bu kod eğer fonksiyonun ilk bildiride, son parametre varsayılan değeri, böyle bir şey varsa işe yarar:

//declaration
void error(char const *msg, bool showKind, bool exit = false);

Ve sonraaynı kapsamdadiğer değişkenler için varsayılan değerler (sağ taraftan), daha sonra yapılan açıklamada: sağlayabilir

void error(char const *msg, bool showKind = true, bool exit); //okay

//void error(char const *msg = 0 , bool showKind, bool exit); // error

olarak adlandırılan olabilir:

error("some error messsage");
error("some error messsage", false);
error("some error messsage", false, true);

Online Demo : http://ideone.com/aFpUn

Eğer saniye için varsayılan değer vermeden ilk parametre (soldan sağa) için varsayılan değer veriyorsanız, derlemek olmaz not (beklendiği gibi) : http://ideone.com/5hj46


§8.3.6/4 diyor

Olmayan şablon işlevleri, varsayılan tartışmalar daha sonra ilave edilebilir aynı işlevi bildirimleri kapsam.

Standart örnek kendisi:

void f(int, int);
void f(int, int = 7);

İkinci bildirim varsayılan değer katıyor!

Ayrıca §8.3.6/6.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • alexis gillis

    alexis gilli

    23 HAZİRAN 2011
  • Amazon Web Services

    Amazon Web S

    8 NİSAN 2009
  • Whizzpopping

    Whizzpopping

    10 Kasım 2005