一、重载原则
原则:
- 不允许两个函数除了返回类型以外其他所有的要素全部相同
- 顶层const不影响传入函数的对象,一个顶层const的形参无法与另一个没有顶层const的形参区分。
int fun(const int a); //const普通变量,这个和下面的是一样的
int fun(int a);
int fun(int* a); //顶层const,这个和下面是一样的
int fun(int* const a);
- 形参是指针或者引用时,底层const修饰的形参可以实现函数重载。
//4个fun函数各不相同
int fun(int &a)
{
return 1;
}
int fun(const int &a)
{
return 2;
}
int fun(int *a)
{
return 3;
}
int fun(const int *a)
{
return 4;
}
int main()
{
int b = 10;
int &a1 = b;
const int &a2 = b;
int *a3 = &b;
const int *a4 = &b;
std::cout << fun(a1) << std::endl;
std::cout << fun(a2) << std::endl;
std::cout << fun(a3) << std::endl;
std::cout << fun(a4) << std::endl;
return 0;
}
二、const_cast和重载
const string &shorterString(const string &s1, const string &s2)
{
return s1.size() <= s2.size() ? s1 : s2;
}
string &shorterString(string &s1, string &s2)
{
auto &r = shorterString(const_cast<const string &>(s1),
const_cast<const string &>(s2));
return const_cast<string &>(r);
}
int main()
{
const string s1("abc");
const string s2("abcd");
string s3("asdfgh");
string s4("asdfghjkl");
cout << shorterString(s3, s4) << endl;
return 0;
}
首先将实参转换成const引用类型,然后调用第一个实参为const版本的shorterString函数。接着将返回值强制转换为string的引用类型。
标签:const,函数,int,fun,重载,return,string From: https://www.cnblogs.com/baobaobashi/p/18199473