关于const与函数重载问题
2017-05-12 16:05
309 查看
在学习函数重载问题时,对于参数中含有const属性时函数是否重载问题经常搞混,因此这里试着总结了一下,加深记忆!
#include<iostream>
using namespace std;
void main()
{
int num = 0;
//一、在不涉及指针时
//根据const对象的初始化规则:可以用const对象初始化非const对象,
// 也可以用非const对象初始化const对象
const int a1 = num;//正确:非const对象赋值const对象
int a2 = a1;//正确:const对象赋值非const对象
//总结:因此对于参数列表为同类型的const对象和普通对象的两个同名函数无法构成函数重载
//这是因为对于传入的一个实参,编译器无法找出一个最合适的函数来匹配(都满足)
//二、当涉及指针时
//情况一:常量指针
int *pt0 = #
const int *pt1 = #
int *pb1 = pt1;//错误:不可以用常量指针初始化非常量指针
const int *pb2 = pt0;//正确:可以用非常量指针初始化常量指针
//总结:因此对于参数列表为同类型的常量指针和非常量指针的两个同名函数可以构成函数重载
//情况二:指针常量
int *ptr = #
int *const pc1 = ptr;//正确:非指针常量可以赋值指针常量
int *pc2 = pc1;//指针常量可以赋值非指针常量
//总结:因此对于参数列表为同类型的指针常量和非指针常量的两个同名函数无法构成函数重载
//这是因为对于传入的一个实参,编译器无法找出一个最合适的函数来匹配(都满足)
}
因此,对于下面的函数重载问题我们就清楚了!
//一、在不涉及指针时,下面两个函数无法构成重载
void func_a(int a){cout<<"func_a(int a)"<<endl;}
void func_a(const int a){cout<<"func_a(const int a)"<<endl;}
//二、常量指针情况:下面两个函数可以构成重载
void func_b(int *b){cout<<"func_b(int b)"<<endl;}
void func_b(const int *b){cout<<"func_b(int b)"<<endl;}
//二、指针常量情况:下面两个函数无法构成重载
void func_c(int *c){cout<<"func_c(int *c)"<<endl;}
void func_c(int *const c){cout<<"func_c(int *const c)"<<endl;}
#include<iostream>
using namespace std;
void main()
{
int num = 0;
//一、在不涉及指针时
//根据const对象的初始化规则:可以用const对象初始化非const对象,
// 也可以用非const对象初始化const对象
const int a1 = num;//正确:非const对象赋值const对象
int a2 = a1;//正确:const对象赋值非const对象
//总结:因此对于参数列表为同类型的const对象和普通对象的两个同名函数无法构成函数重载
//这是因为对于传入的一个实参,编译器无法找出一个最合适的函数来匹配(都满足)
//二、当涉及指针时
//情况一:常量指针
int *pt0 = #
const int *pt1 = #
int *pb1 = pt1;//错误:不可以用常量指针初始化非常量指针
const int *pb2 = pt0;//正确:可以用非常量指针初始化常量指针
//总结:因此对于参数列表为同类型的常量指针和非常量指针的两个同名函数可以构成函数重载
//情况二:指针常量
int *ptr = #
int *const pc1 = ptr;//正确:非指针常量可以赋值指针常量
int *pc2 = pc1;//指针常量可以赋值非指针常量
//总结:因此对于参数列表为同类型的指针常量和非指针常量的两个同名函数无法构成函数重载
//这是因为对于传入的一个实参,编译器无法找出一个最合适的函数来匹配(都满足)
}
因此,对于下面的函数重载问题我们就清楚了!
//一、在不涉及指针时,下面两个函数无法构成重载
void func_a(int a){cout<<"func_a(int a)"<<endl;}
void func_a(const int a){cout<<"func_a(const int a)"<<endl;}
//二、常量指针情况:下面两个函数可以构成重载
void func_b(int *b){cout<<"func_b(int b)"<<endl;}
void func_b(const int *b){cout<<"func_b(int b)"<<endl;}
//二、指针常量情况:下面两个函数无法构成重载
void func_c(int *c){cout<<"func_c(int *c)"<<endl;}
void func_c(int *const c){cout<<"func_c(int *const c)"<<endl;}
相关文章推荐
- C++中形参与const形参的函数重载问题。
- 经典问题解析(1)---const和引用、指针与引用、函数重载、C方式编译
- C++关于参数为const引用类型的函数调用参数成员函数的一个问题
- 关于powerbuilder的全局函数重载问题
- 关于const 和&修饰函数返回值的问题
- 关于系统函数重载和属性的问题
- 关于Python中函数重载问题的思考(原创)
- 关于虚函数重载遇到的怪问题 -- 为什么经常调用了基类的函数
- 关于类成员函数结尾带const和不带const的问题
- 关于Python中函数重载问题的思考
- const成员函数和非const成员函数返回引用的问题
- 关于数据库空值和DataSet.GetXML()函数的问题
- const&volatile 与函数重载
- 关于C++模板和重载的小问题
- MFC关于GetClientRect()函数的问题
- C++笔试题 关于函数析构函数未调用的问题
- 关于const和函数
- 关于DLL找不到函数入口点的问题
- 学习类,笔记!关于一个函数里面定义多个类以及相互访问的问题
- 关于ASP.net中的存储过程"为过程或函数指定的参数太多?"的问题