void f(int a = 3, int b = 4, int c = 5) {
std::cout << a << " " << b << " " << c;
}
int main() {
f(,1); //wrong
f(1); //1 4 5
}
默认实参一般是在最右边void f(int a, int b = 1)
类似这种结构,但是也存在例外,当该参数右边有默认实参的时候可以添加默认实参
void f(int a, int b = 2);
void f(int a = 1, int b);
对于非模板类的成员函数,类外的定义中允许出现默认实参,对于模板类的成员函数,所有的默认实参必须在成员函数的初始声明处提供
class C {
public:
void f(int i = 1);
void g(int i, int j = 9);
C(int arg);
};
void C::f(int i = 1) {}
void C::g(int i = 8, int j) {}
C::C(int arg = 1) {}
C::f和C::C
均有错误。f重定义了默认实参,而C通过添加默认实参将其变为默认构造函数,使得程序非良构