我認爲,當一個函數(a)在另一個函數(b)內被調用時,有一種常見的情況,而'a'有一些默認參數,'b'是需要的支持他們。例如:語言設計:默認方法參數繼承
void a(int v1, int v2=0, int v3=1);
void b(int m1, int m2, int v1, int v2=0, int v3=1) {
// ...
a(v1, v2, v3);
// ...
}
但這是違反DRY原則的。它可以導致一個微妙的錯誤,當默認參數「A」改變了,但在「B」沒有改變:
void a(int v1, int v2, int v3=0);
void b(int m1, int m2, int v1, int v2=0, int v3=1) {
// ...
a(v1, v2, v3);
// ...
}
爲什麼在C++繼承默認參數值的機制?它可能看起來像:
void a(int v1, int v2=0, int v3=1);
void b(int m1, int m2, int v1, int v2=default(a::v2, 0), int v3=default(a::v3, 1)) {
// ...
a(v1, v2, v3);
// ...
}
是否有語言,有這樣的語法?
它可能是這個主板上的一個offtopic?
這不會真的成爲話題在這裏,不。我們更傾向於實際的「這個代碼不起作用」的問題。您的問題*可能會在Programmers.SE上正常,但我無法確定。 *主題*絕對適合他們。 –
我刪除了C標籤,因爲C沒有默認參數。 –
在C++中,你可以通過重載'b'(帶有3,4和5個參數)來解決這個問題。如果您不想自己編寫重載,則可以使用可變參數模板/參數包。或者,您可以使用'boost :: optional'作爲參數(對於'b')*使用默認參數*。 – dyp