const 与过载
1、方法包括方法名,返回类型,形参表,修饰符。
2、对于一个方法,const可以出现的地方有返回类型,形参表,和方法后(const成员方法)。
3、返回类型的常量性(是否为const)不同,不能构成过载。为什么?
过载是编译时多态,也就是说,在编译的时候,已经确定下来调用哪个方法。对于又返回类型的方法,调用的时候,可能不处理返回值,这样的话,编译器就不知道该调用哪个方法了。
4、我们知道,形参表不同可以构成过载。如果形参表相同,只是形参的常量性不同,能否构成过载?
形参为引用或者指针,可以构成过载,否则不能构成过载。为什么?
过载是编译时多态,必须在编译时确定调用哪个方法。
如果形参为引用或者指针,调用方法的时候形参就是实参对象本身,根据实参是否为const可以确定调用哪个方法。
如果形参不是引用或者指针,调用方法的时候会进行copy构造(对应的是copy赋值),与实参没有了关系,编译器不知道该调用哪个方法。
5、方法后,是否为const成员方法,可以构成过载。为什么?
这个时候可以根据方法绑定的对象,是否为const,精确匹配,确定调用哪个方法。
注意:对于const成员方法,当前没有过载的非const成员方法,const成员方法会把绑定的对象强制转化为const对象。
主调方法,被调方法,方法的绑定对象(方法的拥有者)。
const 与过载的更多相关文章
- openssl 1.1.1 reference
openssl 1.1.1 include/openssl aes.h: # define HEADER_AES_H aes.h: # define AES_ENCRYPT 1 aes.h: # de ...
- 成员方法与const之间的关系
const可以放在成员方法的三个地方,前.中.后. 首先考虑在中间: 1.const修饰形参,表示形参是否为const 2.如果const修饰引用(指针指向的对象),可以进行过载,如果不是修饰引用(指 ...
- 【03】尽可能使用const
1.为什么搞出const关键字? const指定一个语义约束,指定一个对象不可修改.如果一个对象不可修改,就应该说出来. 2.const与指针 const可以修饰指向之物,也可以修改指针本身.STL中 ...
- const,static,extern 简介
const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...
- C++中的const
一,C++中const的基本知识 1.C++中const的基本概念 1.const是定义常量的关键字,表示只读,不可以修改. 2.const在定义常量的时候必须要初始化,否则报错,因为常量无法修改,只 ...
- const extern static 终极指南
const extern static 终极指南 不管是从事哪种语言的开发工作,const extern static 这三个关键字的用法和原理都是我们必须明白的.本文将对此做出非常详细的讲解. co ...
- const let,console.log('a',a)跟console.log('a'+a)的区别
const 创建一个只读的常量 let块级作用域 const let重复赋值都会报错 console.log('a',a) a console.log('a'+a) a2 逗号的值会有空格:用加号的值 ...
- es6之let和const
在javascript中,我们都知道使用var来声明变量.javascript是函数级作用域,函数内可以访问函数外的变量,函数外不能访问函数内的变量. 函数级作用域会导致一些问题就是某些代码块内的变量 ...
- construction const parameter问题 构造函数const引用参数问题
工程在window下编译没有任何问题, 但是在linux(CentOS6)下编译就老是报错 C++ 编译器已升级到最新版 6.1.0 错误如下: In file included /bits/stl_ ...
随机推荐
- python 三级菜单 的另1种实现方法
menu = { "华南":{ "广东":["广州市","佛山市","深圳市","东莞市& ...
- loj2480 [CEOI2017]One-Way Streets 边双+树上差分
边双无法确定 缩完边双就是一棵树 树上差分随意弄一下吧... #include <vector> #include <cstdio> #include <cstring& ...
- scanf输入字符串相关
http://blog.csdn.net/liuhui_8989/article/details/13398793 补充..输入s的时候不要把变量设置成string类型,设置成char数组类型.. ...
- [Codeforces 1060F] Shrinking Tree
Link: 传送门 Solution: 原来CF的官方题解也能鸽啊…… 详细题解 该题思路: 1.对于每个点删边方案数为$fac[n-1]$,总贡献为每种方案下满足的概率的和,接下来直接求贡献 2.每 ...
- [洛谷P3987]我永远喜欢珂朵莉~
[洛谷P3987]我永远喜欢珂朵莉~ 题目大意: 给你\(n(n\le10^5)\)个数\(A_{1\sim n}(A_i\le5\times10^5)\),\(m(m\le5\times10^5)\ ...
- 第2篇--JVM的内存区域划分
学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆.栈以及静态数据区.那么在Java语言当中,内存又是如何划分的呢? 由于Java程序是交由JVM执行 ...
- Problem F: 深入浅出学算法007-统计求和
Description 求含有数字a且不能被a整除的4位整数的个数,并求这些整数的和 Input 多组测试数据,先输入整数T表示组数然后每组输入1个整数a(1<=a<=9) Output ...
- JSP -- include指令与include动作的区别
JSP -- include指令与include动作的区别 (1)格式的区别: include指令:<%@include file = "文件名"%> include动 ...
- php 安装 Redis 扩展
开发环境安装包为:wamp3.1.0,安装成功后 wamp/bin 目录下有php以下几个版本: 这里以php7.1.9为例进行redis扩展安装,其他php版本也是一样的. 进行安装 step 1: ...
- asp.net 链接数据库ADO.NET
web.config <configuration> <connectionStrings> <add name="constr" connectio ...