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

  • New Scientist

    New Scientis

    27 Kasım 2006
  • Pál Zoltán Illés

    Pál Zoltán

    30 NİSAN 2007
  • SaMmM123

    SaMmM123

    3 Mayıs 2006