2017-01-19 48 views
0

如何只使用第三個參數(第一個和第二個參數必須是缺省值)?函數中只使用一個默認參數的C++

像這樣:

double func(const double a = 5, const double b = 6, const double c = 7); 

int main() 
{ 
    cout << "A = " << func(10) << endl << endl; //if i do like this, i'm using first argument, but not 3rd. 
} 
+6

你不能。 C++不能以這種方式工作。 –

+0

即使你可以這樣做,如果你只想使用第三個參數,那麼'a'和'b'會被默認爲什麼? – PaulMcKenzie

回答

0

這樣做將是交換參數順序的唯一方法:

double func(const double c = 7, const double a = 5, const double b = 6); 
2

C++不支持您要現在做什麼。但是,有辦法解決這個問題。您可以使用Named Parameter Idiom或升壓的Paremeter library

我推薦前者。它更清晰,更容易調試,等...

0

你可以(可能)使用一些包裝類型和超載,然後使用類型來命名參數調用時:

struct A { double a; constexpr static double def = 5.0; }; 
struct B { double b; constexpr static double def = 6.0; }; 
struct C { double c; constexpr static double def = 7.0; }; 

double func(double a=A::def, double b=B::def, double c=C::def) { /* whatever */ } 

double func(A a) { return func(a.a, B::def, C::def); } 
double func(B b) { return func(A::def, b.b, C::def); } 
double func(C c) { return func(A::def, B::def, c.c); } 

int main() 
{ 
    func(A{3.0}); 
    func(B{9.0}); 
    func(C{12.0}); 
}