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
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.
Nerede C varsayılan parametre değeri k...
JavaScript bir işlev için varsayılan p...
C# 4.0: varsayılan değeri isteğe bağlı...
Ne zaman Eclipse parametre listesi içi...
Varsayılan parametre değeri olarak işl...