C/C++中默认参数在哪指定?函数声明还是定义?默认参数需放在右边
2017-07-15 18:33
591 查看
成员函数参数的默认值是在声明里赋,还是在定义里?
class CAbc
{
public:
static int m_abc;
CAbc(){}
static void set(int abc);
int fn(int a,int b=0,int c=5);
//int fn(int a,int b,int c);
};
void CAbc::set(int abc)
{
m_abc=abc;
}
//int CAbc::fn(int a,int b=0,int c=5)
//redefinition of default parameter : parameter 3
int CAbc::fn(int a,int b,int c)
{
cout<<a << b << c << endl;
return a;
}
int CAbc::m_abc=1000;
int main(int argc, char* argv[])
{
CAbc a;
a.fn(6);
a.set(10);
return 0;
}
声明是用户可以看到的部分,客户非常信任地使用这个特性,希望得到一定的结果,但是你在实现里使用了不同的缺省值,那么将是灾难性的。因此编译器禁止声明和定义时同时定义缺省参数值。
类的成员函数的参数表在声明时默认参数位于参数表右部,如int fn(int a,int b=0,int c=5)之类的,但在它定义的时候则不能加默认参数,只能写int fn(int a,int b,int c);
若声明时没有定义缺省参数值,那么在定义成员函数时可以定义缺省参数值。但这种情况通常用户是看不见的,因此应避免。
对于非类中的函数,在函数声明中定义默认参数的另外一个好处时,可以利用声明来随意更改默认参数的值。
//int fglobal(int a,int b=2,int c=5)
//redefinition of default parameter : parameter 3
int fglobal(int a,int b,int c)
{
cout<<a << b <<c<< endl;
return a;
}
int fglobal(int a,int b=2,int c=5); //
全局的申明
int CAbc::m_abc=1000;
int main(int argc, char* argv[])
{
CAbc a;
a.fn();
//fglobal(); //此时用的全局申明,无第一个参数不行
fglobal(1);
int fglobal(int a=2,int b=3,int c=5);
// 局部的申明,不管上述默认参数是在定义还是申明中
fglobal();
::fglobal(3); // 此时将采用全局申明
return 0;
}
//205
//125
//235
//325
}
实践证明,缺省参数可以在定义中,也可以在声明中,只要全局的声明和定义中只有一个带参数即可
局部的声明中可以随便改变默认参数(不管上述默认参数是在定义中还是在声明中)。在下一次改变之前,此参数将一直生效,并将覆盖全局的申明。若要使用全局的声明默认参数,可以加“::”
转自:http://blog.csdn.net/sailor_8318/article/details/3348383
class CAbc
{
public:
static int m_abc;
CAbc(){}
static void set(int abc);
int fn(int a,int b=0,int c=5);
//int fn(int a,int b,int c);
};
void CAbc::set(int abc)
{
m_abc=abc;
}
//int CAbc::fn(int a,int b=0,int c=5)
//redefinition of default parameter : parameter 3
int CAbc::fn(int a,int b,int c)
{
cout<<a << b << c << endl;
return a;
}
int CAbc::m_abc=1000;
int main(int argc, char* argv[])
{
CAbc a;
a.fn(6);
a.set(10);
return 0;
}
声明是用户可以看到的部分,客户非常信任地使用这个特性,希望得到一定的结果,但是你在实现里使用了不同的缺省值,那么将是灾难性的。因此编译器禁止声明和定义时同时定义缺省参数值。
类的成员函数的参数表在声明时默认参数位于参数表右部,如int fn(int a,int b=0,int c=5)之类的,但在它定义的时候则不能加默认参数,只能写int fn(int a,int b,int c);
若声明时没有定义缺省参数值,那么在定义成员函数时可以定义缺省参数值。但这种情况通常用户是看不见的,因此应避免。
对于非类中的函数,在函数声明中定义默认参数的另外一个好处时,可以利用声明来随意更改默认参数的值。
//int fglobal(int a,int b=2,int c=5)
//redefinition of default parameter : parameter 3
int fglobal(int a,int b,int c)
{
cout<<a << b <<c<< endl;
return a;
}
int fglobal(int a,int b=2,int c=5); //
全局的申明
int CAbc::m_abc=1000;
int main(int argc, char* argv[])
{
CAbc a;
a.fn();
//fglobal(); //此时用的全局申明,无第一个参数不行
fglobal(1);
int fglobal(int a=2,int b=3,int c=5);
// 局部的申明,不管上述默认参数是在定义还是申明中
fglobal();
::fglobal(3); // 此时将采用全局申明
return 0;
}
//205
//125
//235
//325
}
实践证明,缺省参数可以在定义中,也可以在声明中,只要全局的声明和定义中只有一个带参数即可
局部的声明中可以随便改变默认参数(不管上述默认参数是在定义中还是在声明中)。在下一次改变之前,此参数将一直生效,并将覆盖全局的申明。若要使用全局的声明默认参数,可以加“::”
转自:http://blog.csdn.net/sailor_8318/article/details/3348383
相关文章推荐
- C/C++笔试系列--默认参数在哪指定?函数声明还是定义?
- 默认参数在哪指定?函数声明还是定义?
- C++中到底在声明中还是定义中指定默认参数
- 学习笔记之C++为什么将函数声明或者类的定义放在.h文件中,而将其实现放在原文件中
- Python - 在定义函数时,为什么默认参数不能放在必选参数前面?
- C++ 函数声明中指定,默认参数
- C++中类型注册有的时候,函数找不到定义,可能是相应的头文件中防止重定义的声明,还是用原来的,没有做相应的更新
- c++带默认参数的函数的声明、定义及使用总结
- C++默认参数在声明还是定义确定?
- 【转】深入理解C++的动态绑定和静态绑定 & 不要重定义虚函数中的默认参数
- c++ 中默认参数的函数声明和定义的注意事项
- python-在定义函数时,不定长参数中,默认值参数不能放在必选参数前面
- Python - 在定义函数时,为什么默认参数不能放在必选参数前面?
- Scala 学习笔记(五)------定义函数指定默认参数
- C++关于函数声明和定义中参数赋值为0调用问题演示
- C++学习 【4.5】 利用函数实现指定的功能---局部变量、全局变量、变量的存储类别、声明和定义
- C++ 函数声明中指定,默认参数
- 读书笔记 effective c++ Item 37 永远不要重新定义继承而来的函数默认参数值
- c++模板类/模板函数的声明与定义应该放在头文件里,不要分开来写类中函数的声明与定义
- c++模板类/模板函数的声明与定义应该放在头文件里