形参仅区别于是否const的重载
来源:互联网 发布:自动讲故事软件 编辑:程序博客网 时间:2024/05/16 01:18
在《重载函数的概念》一文中,提到过“Record lookup(Phone);”和“Record lookup(constPhone);”并不是重载,因为形参仅仅区别在是否const。在那篇文章的结尾,还留了一句话:“有的时候可以凭是否const来重载,比如引用传递和指针传递。”
这里就有必要知道引用传递、指针传递和值传递前加const的实质了。
首先要说的是,非const的引用和非const的指针都可以传递给const的形参。也就是说,即使没有重载,只有const形参这一种函数,也可以处理对非const和const的实参的调用。这句话说来有些不顺嘴,举个例就明白了:
void print (int& t);//函数一
void print (const int& t);//函数二
int i = 3;
const int j = 4;
print(i);//语句一
print(j);//语句二
如果没有函数一的话,以上语句一和语句二都可以调用函数二。如果有了函数一,那么语句一将调用函数一。
对于值传递,因为形参是复制传递进函数的,函数内无法改变实参。那么,加不加const对于实参来说没有任何区别。只有引用传递和指针传递,const才是实实在在地保护了实参。函数调用的选择是根据实参进行的,所以,只有引用传递和指针传递可以用是否加const来重载。
那么,值传递的函数那个const是不是白加了?我认为不是。虽然const对保护实参不起作用,而保护形参也没有太大的必要,但是这样做可以减少很多BUG。很简单的例子就是你将“if (i == j)”写成“if (i = j)”时,如果i是一个const形参,编译器将帮你查出这个问题。
这里就有必要知道引用传递、指针传递和值传递前加const的实质了。
首先要说的是,非const的引用和非const的指针都可以传递给const的形参。也就是说,即使没有重载,只有const形参这一种函数,也可以处理对非const和const的实参的调用。这句话说来有些不顺嘴,举个例就明白了:
void print (int& t);//函数一
void print (const int& t);//函数二
int i = 3;
const int j = 4;
print(i);//语句一
print(j);//语句二
如果没有函数一的话,以上语句一和语句二都可以调用函数二。如果有了函数一,那么语句一将调用函数一。
对于值传递,因为形参是复制传递进函数的,函数内无法改变实参。那么,加不加const对于实参来说没有任何区别。只有引用传递和指针传递,const才是实实在在地保护了实参。函数调用的选择是根据实参进行的,所以,只有引用传递和指针传递可以用是否加const来重载。
那么,值传递的函数那个const是不是白加了?我认为不是。虽然const对保护实参不起作用,而保护形参也没有太大的必要,但是这样做可以减少很多BUG。很简单的例子就是你将“if (i == j)”写成“if (i = j)”时,如果i是一个const形参,编译器将帮你查出这个问题。
- 形参仅区别于是否const的重载
- const的重载讲解
- C++重载(关于const的重载)
- C++ 基于const的重载
- const *和* const的区别
- const * 与 *const的区别
- void operator=(const CClass&) 和 CClass& operator=(const CClass&)两种赋值运算符重载的区别
- C/C++的区别(默认值、内联函数、函数重载、const、引用、参数、返回值)
- const重载
- 于是
- 对象引用与对象的区别?判别对象相等否?
- 有关const *、* const 、const * const 之间的区别
- 类的const和非const成员函数的重载
- 类的const和非const成员函数的重载
- 类的const和非const成员函数的重载
- 类的const和非const成员函数的重载
- 类的const和非const成员函数的重载
- 类的const和非const成员函数的重载
- 2008年的生日
- 基于Linux操作系统的底层驱动技术转
- vc常用技巧汇总
- ScreenToClient
- INFORMIX的锁技术
- 形参仅区别于是否const的重载
- Linux下的开源GIS现状
- Python版的开心网(kaixin001.com)争车位停车外挂
- Linux下PCI设备驱动程序开发基本框架
- 简单的查看系统端口占用情况
- android学习笔记之-利用Intent在多个Activity之间跳转
- Sping配置详细说明之(autowire,scope)
- 图4-3.类型解析算法 示意图
- SQL SERVER 与ACCESS、EXCEL的数据转换