首先一点,二者是可以构成重载的,仅根据返回值的 const/non-const 与否是无法构成重载的;

class A
{
public:void foo() {}  // 非 const 型成员
};void foo(const A& a)
{a.foo();// 编译器报错// 对象包含与成员函数不兼容的类型限定符
}

改造为:

class A
{
public:void foo() { std::cout << "A::foo()" << std::endl;}void foo() const {std::cout << "A::foo() const" << std::endl; }// 两者可以构成重载
};void foo(const A& a)
{ a.foo(); }                        // 调用的是const型成员函数函数void foo2(A& a)
{ a.foo(); }                        // 调用的是 non-const 型成员函数

再看一个更为直观的例子:

class A
{
public:void foo() const { std::cout << "A::foo() const" << std::endl;}void foo() { std::cout << "A::foo()" << std::endl;}void foo2() { std::cout << "A::foo2()" << std::endl; }
};int main(int, char**)
{A a;a.foo();// 重载时,non-const 的对象自动访问 non-const 的成员方法a.foo2();const A aa;aa.foo();// aa.foo2(); 会报错// const 的仅能访问const 的return 0;
}

C++ const型成员函数与 non-const型成员函数相关推荐

  1. 成员函数后面加上const的作用

    const表示成员函数不会修改类中的数据成员. 规则: 在类中被const 声明的函数只能访问const 函数,而非const 函数可以访问任意成员函数. 在成员函数中不管数据是否具有const 属性 ...

  2. const对象只能调用const成员函数、不能调用非const成员函数;非const对象可以调用const成员函数

    引发原因: 由调用成员函数时隐式传入的当前对象的this指针引起. 1. 非const成员函数中的隐式参数:classA* this 2. const成员函数中的隐式参数:const classA* ...

  3. C++成员函数中的const修饰符

    在一些C++源码中经常见到const修饰的函数,这里的const与放的位置无关,也就是下面三种写法是等效的,只不过通常使用第一种写法,可以编写函数进行测试,这里的const虽然写在了函数的位置,其实是 ...

  4. 静态成员函数不能采用const修饰的原因

    静态成员函数不能用const修饰 ,也不能存取nonstatic数据 C++中静态成员函数不能用const修饰的原因: static在c++中的第五种含义:用static修饰不访问非静态数据成员的类成 ...

  5. 解决E1776:无法引用 函数 “A::A(const A)“ (已隐式声明) -- 它是已删除的函数

    出错原因 先介绍下博主遇到这个错误的背景情况. 有一个类A,没有定义默认构造函数A(): class A{int m_val=0;int m_type=0;A(int val):m_val(val){ ...

  6. 常对象和常函数的关系 const

    转载自:http://www.diybl.com/course/3_program/c++/cppsl/2008525/117871.html (1) 常对象 用const修饰的对象叫对象常量,其格式 ...

  7. c++中Const,Const函数,Const变量,函数后面的Const

    看到const 关键字,C++程序员首先想到的可能是const 常量.这可不是良好的条件反射.如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮.const 更大的魅力是它可以修饰函数的 ...

  8. Const用法总结:Const,Const函数,Const变量,函数后面的Const (转)

    看到 const 关键字, C++ 程序员首先想到的可能是 const 常量.这可不是良好的条件反射.如果只知道用 const 定义常量,那么相当于把火药仅用于制作鞭炮. const 更大的魅力是它可 ...

  9. [Reprint]C++函数前和函数后加const修饰符区别

    c++中关于const的用法有很多,const既可以修饰变量,也可以函数,不同的环境下,是有不同的含义.今天来讲讲const加在函数前和函数后面的区别.比如: 01 #include<iostr ...

  10. 在函数后面加const

    概述: 函数名后加const使类成员函数不能修改类内成员! mutable可以突破const限制! 相信大家都见过在函数前面加const的情况,即修饰函数的返回值! 那么在函数后面加const,比如下 ...

最新文章

  1. 全球及中国皮肤晒黑喷雾行业销售模式及动态盈利分析报告2021年版
  2. Google大数据技术架构探秘
  3. bzoj 3224 Tyvj 1728 普通平衡树
  4. 第17课:RDD案例(join、cogroup等实战)
  5. python保存变量_将python 中的变量保存到本地
  6. ThinkPHP3.2.3快速入门 · 看云
  7. python模块用法教程_Python学习之asyncore模块用法实例教程
  8. mysql中 REPLACE INTO 和 INSERT INTO 的区别
  9. C++socket编程(五):5.1 创建tcpclient项目
  10. Maven学习总结(53)——利用Maven插件构建镜像进行持续交付中的版本号管理
  11. python基础_collections系列
  12. linux 目录与分区与文件,LINUX中的分区与文件系统
  13. C++期末课程设计——宾馆客房管理系统(详细报告+源代码+详细注释)(另附加“25+”C++C语言期末课程设计系统下载地址)
  14. Linux上用于Json数据处理并导入Mysql的几个有用Python脚本
  15. 做项目遇到的一些CSS问题
  16. 集群服务器上的jupyter配置
  17. 哥尼斯堡的“七桥问题” (25分)
  18. UVM基础-TLM通信机制(二)
  19. 芒果改进目录一览|原创改进YOLOv5、YOLOv7等YOLO模型全系列目录 | 人工智能专家唐宇迪老师联袂推荐
  20. 什么是物联网 (IoT)?

热门文章

  1. kafka linux根目录满,Linux磁盘空间满的诡异问题解决方案
  2. Pytorch——把Numpy转化为Torch
  3. LeetCode 213. 打家劫舍 II(动态规划)
  4. Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException: Request body too large
  5. 删除一个带有文件的文件夹
  6. mysql有哪几种索引
  7. 1019. General Palindromic Number (20)
  8. 理解storm的ACKER机制原理
  9. 使用JasperReport+iReport进行Web报表开发
  10. CCF202009-5 密信与计数【AC自动机】(100分题解链接)