非成员函数可以多次声明,而成员函数只能声明一次吗?这是正确的吗 ?我的例子似乎是肯定的。
但为什么?
class Base{
public:
int foo(int i);
//int foo(int i=10); //error C2535: 'void Base::foo(int)' : member function already defined or declared
};
//but it seems ok to declare it multiple times
int foo(int i);
int foo(int i=10);
int foo(int i)
{
return i;
}
int main (void)
{
int i = foo();//i is 10
}
答案 0 :(得分:6)
根据标准(2003),§8.3.6/ 4说,
对于非模板功能,默认 可以在以后添加参数 声明函数在同一个 范围。
标准本身的例子:
void f(int, int);
void f(int, int = 7);
第二个声明添加默认值!
另见§8.3.6/ 6。
一个有趣的(有点相关)主题:
和§9.3/ 2,
除了出现在类定义之外的成员函数定义,除了出现在类定义之外的类模板和成员函数模板(14.7)的成员函数的显式特化之外,成员函数 不得重新申报。
希望有所帮助。
答案 1 :(得分:1)
使用此简化版本可获得相同的结果:
int foo() ;
int foo() ; // OK -- extern functions may be declared more than once
class C {
int foo() ;
int foo() ; // Error -- member function may not be declared more than once
} ;
也许原因是历史性的 - 很多C
代码都使用extern
函数的重新声明,所以必须允许它们。
答案 2 :(得分:0)
确定性有效 - 但我认为这是不好的做法。