非成员函数可以多次声明,而成员函数只能声明一次?

时间:2011-09-22 17:11:06

标签: c++ member-functions declare non-member-functions

非成员函数可以多次声明,而成员函数只能声明一次吗?这是正确的吗 ?我的例子似乎是肯定的。

但为什么?

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 
}

3 个答案:

答案 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)

确定性有效 - 但我认为这是不好的做法。