下面的两个函数构成重载吗?

void M(int a){} //(1)
void M(const int a){} //(2)

下面的呢?

void M(int& a){} //(3)
void M(const int& a){} //(4)

const在函数中的含义是该值在此函数范围内“无法修改”。站在调用者的角度,所有的值传递都是无法修改实参的。所以,(1)/(2)两个函数在调用者看来,是语义相同的,不能构成重载。
(4)与(3)的区别是,(4)无法修改引用指向的对象,而(3)可以。从调用者的角度,两个函数有不同的语义,构成重载。
demo 
 #include <iostream>using namespace std;class Y{};/* 下面两个函数具有相同语义,即a均是值拷贝,无法改变实参。 */void Method1(int a){}void Method1(const int a){} // error:redefinition/* 同样的语义,对象拷贝 */void Method2(Y y){}void Method2(const Y y){} // error:redefinition/* 下面两个函数具有不同语义,即后者无法改变实参,之所以使用引用,可能是因为不想拷贝,节省内存。 */void Method3(int& a){}void Method3(const int& a){}void Method4(Y& y){}void Method4(const Y& y){}int main(int count,char * args[]){return 0;}

[C++] const与重载相关推荐

  1. C++ 学习之函数重载、基于const的重载

    今天阅读boost源码发现一个奇怪的问题(enable_shared_from_this.hpp源码) #ifndef BOOST_SMART_PTR_ENABLE_SHARED_FROM_THIS_ ...

  2. Const 重载解析

    1. Const重载应用场景 首先,对于函数值传递的情况,因为参数传递是通过复制实参创建一个临时变量传递进函数的,函数内只能改变临时变量,但无法改变实参.则这个时候无论加不加const对实参不会产生任 ...

  3. 类的const和非const成员函数的重载

    我们从一个例子说起,来看上一篇文章中的String类, 我们为它提供一个下标操作符([ ])以读写指定位置的字符(char). 只要了解过C++的操作符重载的语法,很快就可以写出下面这个[]操作符重载 ...

  4. C++中的const关键字(zz)

    [补充]mutable关键字 有时我们希望类的数据成员即使在const成员函数中,依然是可以修改的,这时就可以把它们声明为mutable来实现.这样的应用,比如记录各种操作的调用次数,这时,即使在co ...

  5. C++ 复数类加减法运算重载为成员函数形式

    运算符的重载形式有两种,即重载为类的非静态成员函数和重载为非成员函数.运算符重载为类的成员函数的一般语法形式为: 返回类型 operator 运算符(形参表){函数体 } 运算符重载为非成员函数的一般 ...

  6. const的一些注意事项

    今天在继续学习STL的过程中遇到了一些编译错误.看一下下面的代码-- class stone{private:int weight;public:stone(int i){weight=i;}bool ...

  7. 关于重载函数的一些学习

    重载函数 出现在相同作用域中的两个函数,如果具有相同的名字而形参表不同,则称为重载函数. 使用某种程序设计语言编写过算术表达式的程序员都肯定使用过重载函数.表达式 1 + 3 调用了针对整型操作数加法 ...

  8. C++ static与const用法详解

    目录 static的作用: 对普通变量: 1.局部变量: 2.全局变量 对类中变量: 1.成员变量 2.成员函数 const的作用: static的作用: 对普通变量: 1.局部变量: 在局部变量之前 ...

  9. 操作符(++,+,+=,小于号,(),--等)重载

     1. 操作符(++,+,+=,小于号等)重载 新建QT项目,编写头文件 #ifndef DIALOG_H #define DIALOG_H#include <QDialog> #in ...

最新文章

  1. laravel EncryptCookies中间件导致无法获取自定义cookie
  2. SharePoint Online 创建用户和组
  3. Linux文件IO深入剖析
  4. python import requests报错_import requests 出错,搜了很多,没解决,求教.
  5. java银行管理系统_java实现银行管理系统
  6. IBASE save error
  7. 《零基础看得懂的C语言入门教程 》——(七)C语言的循环分分钟上手
  8. Core Location :⽤用于地理定位
  9. JavaScript 多级联动浮动菜单
  10. YOLOv2检测过程的Tensorflow实现
  11. 对JavaScript解析JSON格式数据的理解
  12. 权限管理系统之字典(代码)管理
  13. linux 下载hbase源码,linux上安装hbase(示例代码)
  14. 【UML 建模】在线UML建模工具 ProcessOn 使用详解
  15. html转pdf加密文件,加密文件怎么解密?pdf加密文件去除密码
  16. 王天官系古盐山县(今孟村县王帽圈)人
  17. cfree5文件标签混乱处理。
  18. Go语言自学系列 | golang包管理工具go module
  19. 搭配emuc-b202 can卡通讯时,时断时续
  20. stm32——自定义HID设备

热门文章

  1. 人脸检测的harr检测函数
  2. vuejs目录结构启动项目安装nodejs命令,api配置信息思维导图版
  3. 中国机器人市场前景开阔 本土企业如何突围?
  4. 2015北京区域赛 Mysterious Antiques in Sackler Museum 几何基础+思维
  5. 模拟器显示屏上方的信号和电池图标不显示设置
  6. Linux用户和用户组管理常见问题
  7. go语言的书籍的淘宝调查
  8. spark加盐(salting)操作
  9. intellij设置scala的sdk
  10. intellij工程文件名都是红色+右键没有run选项