c++学习笔记之函数重载与const的关系
2012-09-19 16:30
603 查看
函数重载与const的关系:
1、如果形参是非引用类型的,则下面两个函数是编译报错的(error C2084: 函数“void rldFunction(int)”已有主体)
For example ,如果实参是const int num; 很明显只能调用第一个函数。如果实参是int num;编译器一般会按照非const对象精确匹配的原则调用第二个。
为什么会这样?其实个人理解还是参数传递的事,非引用形参往函数中传递的是num的副本(就是复制品,并不是真正的num),那么函数是根本不可能修改真正的num的,也就是说加不加const对编译器没区别,那就会报错。而引用型的形参就不同了啊,它是把真正的实参传递给了函数的呢,当然加const 与 不加const 就有很大区别了!!!
题外话:
1、对指针形参的相关处理类似引用。
2、区别“指向const对象的指针” 与 “const 指针”,后者指的是指针本身是const类型的:
1、如果形参是非引用类型的,则下面两个函数是编译报错的(error C2084: 函数“void rldFunction(int)”已有主体)
void rldFunction(int paraIn) { cout << paraIn << endl; } void rldFunction(const int paraIn) { cout << paraIn << endl; }2、如果形参是引用类型的,则下面的函数是可以重载的,
void refRldFunction(const int & para) { cout << "para:" << para << endl; } void refRldFunction(int & paraRef) { cout << "paraRef:" << paraRef << endl; }那么调用时候(refRldFunction(num))会调用哪一个呢?这得看实参的类型了:
For example ,如果实参是const int num; 很明显只能调用第一个函数。如果实参是int num;编译器一般会按照非const对象精确匹配的原则调用第二个。
为什么会这样?其实个人理解还是参数传递的事,非引用形参往函数中传递的是num的副本(就是复制品,并不是真正的num),那么函数是根本不可能修改真正的num的,也就是说加不加const对编译器没区别,那就会报错。而引用型的形参就不同了啊,它是把真正的实参传递给了函数的呢,当然加const 与 不加const 就有很大区别了!!!
题外话:
1、对指针形参的相关处理类似引用。
2、区别“指向const对象的指针” 与 “const 指针”,后者指的是指针本身是const类型的:
pntRldFunction(int *); pntRldFunction(int *const);// 会报错,重复声明
相关文章推荐
- C++学习笔记十二之函数重载
- C++学习笔记之模板(1)——从函数重载到函数模板
- C++学习笔记(八):函数重载、函数指针和函数对象
- 【菜鸟C++学习笔记】11.内联函数与const成员函数
- C++ 学习之函数重载、基于const的重载
- C++学习笔记->函数重载
- 【C++学习笔记】函数重载和函数覆盖
- VS2010 C++ 学习笔记(一) 引用 函数参数默认值 函数重载 内联inline
- C/C++学习笔记7:const运用(2)之const成员函数
- 新手学习C++笔记4:函数的原型化与重载
- C++学习笔记之 函数重载和函数指针在一起
- C++学习笔记之函数重载简介
- C++学习笔记五——函数重载(多态)、函数模板及函数模板重载和完全匹配与最佳匹配
- C++学习笔记 函数重载
- C++学习笔记22,普通函数重载(1)
- C++ 学习之函数重载、基于const的重载
- C++学习笔记8,const在函数方面的使用(二)
- 【从C到C++学习笔记】引用/const引用/引用传递/引用作为函数返回值/引用和指针的区别
- C++ 学习笔记(14)重载运算与类型转换、函数对象、function库
- C++ 学习之函数重载、基于const的重载