构造函数默认参数的问题
#include <iostream>
using namespace std;
class St
{
public:
St(){a=0;b=0.0;out();}
St(int m=8,int n)//这里为什么设置第一个m的默认值就会出现错误,设置第二个就不错,两个全部赋默认值和第一个构造函数有什么区别?
{a=m;b=n;out();}
void out()
{cout < <a < <endl < <b < <endl;}
private:
int a,b;
};
St(int m,int n=8) 这样就是对的.
[解决办法]
因为在调用的时候,C++不支持VB那种可以空一个参数或者显示提供参数名的语法。
于是,如果你的有默认值的参数之后还有不带默认值的,那么这个默认参数一点意义也没有。
[解决办法]
St(int m=8,int n)
=================
默认参数只能的出现在参数右边
[解决办法]
你可以这么理解
void st(int m = 8, int n){};
使用st(0)的时候,编译器知道这个函数需几个参数,但这个8是0是哪一个的值呢
它可以认为是n的值,m用默认值8,也可以认为m的值用0,n的值未提供报err
所以
编译器对于默认参数一律认为靠右出现,这样就能够识别出什么是正确的调用,什么是不合适的
void st(int m, int n = 8){};
st(0)编译器给m值0,n使用默认值8
[解决办法]
是标准规定的
在默认参数后面的所有参数必须也是默认参数!!
原因么,
就是因为不这么做,
可能就歧义了 ~
[解决办法]
应该是编译器的原因吧
[解决办法]
这样容易观察哪个没有初始化