函数重载需要参数不同, 但如果一个函数标记为常量(accessor)也可以通过编译, 但却调用不成功.
比如:
class T
{
public:
T(int x=0)
:value{x}{}
// 普通引用
int & v()
{
cout << "normal reference" << endl;
return value;
}
// 常态引用
const int & v() const
{
cout << "const refrence" << endl;
return value;
}
private:
int value;
};
int main()
{
T t{3};
int & a = t.v();
const int & b = t.v();
return 0;
}
结果静态引用还是使用的普通引用函数, 那里出问题了呢?
const成员函数可以被非const成员函数重载,这种情况下,类对象的常量性决定调用哪个函数
const T A1;
T A2;
A1.v(); // 调用const成员函数
A2.v(); // 调用非const成员函数
函数重载是通过参数数量和类型来区别各个重载的。如果参数类型一样,数量还一样,那么就会被标记为同一个函数。编译通过,说明代码中会存在两个函数名一样的函数,
在调用时,如果存在多个函数名一样的函数,那么会调用第一个函数。你把那两个函数声明的先后顺序调换一下,调用的结果恐怕不一样了
函数重载是通过参数数量和类型来区别各个重载的。如果参数类型一样,数量还一样,那么就会被标记为同一个函数。编译通过,说明代码中会存在两个函数名一样的函数,
在调用时,如果存在多个函数名一样的函数,那么会调用第一个函数。你把那两个函数声明的先后顺序调换一下,调用的结果恐怕不一样了