符号“”和const在函数里不同位置的用法
符号“&”和const在函数里不同位置的用法
其实引用的初衷是节省下空间,但是我们要注意引用是针对变量引入的。
1、在返回类型与函数名之间加“&”需要注意函数的返回值(能不加就最好不加)
(1)如果函数返回void则肯定可以用。
(2)如果函数返回一种既定类型的量则编译会有警告,因为函数调用完其被分配的栈空间就被释放了。
如 Team operator+(const Team & t) ; //2 用成员函数重载+运算符
函数体
Team Team::addtototal(const Team & t) { Team temp; temp.t_number = t_number + t.t_number; temp.t_totalscore = t_totalscore + t.t_totalscore; temp.averagescore(); return temp; } 加 & 号也可以运行,但会有如下警告: team.cpp: In member function ‘Team& Team::operator+(const Team&)’: team.cpp:73:7: warning: reference to local variable ‘temp’ returned 因为调用完,temp这个临时对象空间就被释放了,所以此处返回引用按理说时错误的。
友元重载同样会遇到上面情况:
friend Team operator+(const Team & t1,const Team & t2);//3 用友元函数重载+运算符
即temp的空间被释放掉了所以&temp没空间了
(3)若函数返回的事类中的默认this指针的值则会出现错误。
如Team operator>(const Team & t); //1 用成员函数重载>运算符
函数体
Team Team::operator>(const Team & t) { if(t.t_totalscore > t_totalscore) { return t; } else { return *this;//不用想太多,this就代表大的对象,由if的条件直接判断 } } 加 & 号不可运行,错误如下: team.cpp: In member function ‘Team& Team::operator>(const Team&)’: team.cpp:104:10: error: invalid initialization of reference of type ‘Team&’ from expression of type ‘const Team’
友元重载同样会遇到上面情况:
friend Team operator>(const Team & t1, const Team & t2); //2 用友元函数重载>运算符
即该对象用完到下一个对象时this就会立马改变了,所以返回会出错。
2、在函数参数的类型与变量间加&需要注意参数的类型(看实参是什么)
(1)若后面调用函数时给的实参是一个变量则编译不会出错。
Team::Team(int & t) { t_totalscore = t;
}
正确调用:
int m = 87; Team tm3(m);
Team::Team(int const t) { t_totalscore = t; }
正确调用
Team tm3(87);
(2)若后面调用函数是实参是整型常量、字符型常量则编译会出错,因为引用是变量的别名。
const的初衷是定义一些其内部值不可改变的数据,const用法只需明白其功能类比&即可得到
1、在函数返回类型之前的const
函数返回的值不可改变,即后面不能拿其返回值当变量用。
2、在形参类型之前的const(实参常数赋值后就不希望它改变)
函数的实参不能为变量。
Team::Team(int const t)
{
t_totalscore = t;
}
正确调用
Team tm3(87);
为变量时不能定义为const。
Team::Team(int & t)
{
t_totalscore = t;
}
正确调用:
int m = 87;
Team tm3(m);
3、类中在函数最后加的const(显思维)
执行函数时不改变类里的成员变量。
转载于:https://www.cnblogs.com/jiasson/archive/2013/01/31/2888092.html
符号“”和const在函数里不同位置的用法相关推荐
- const对象不能调用非const成员函数
在C++中,可以用const来定义一个const对象,但const对象不可以调用类中的非const成员函数 原因 引发原因:: 由调用成员函数时隐式传入的当前对象的this指针引起. 非const成员 ...
- 【C++】类和对象【中篇】--C++六个默认成员函数以及const成员函数
文章目录 一.类的6个默认成员函数 二.构造函数 1.概念 2.特性 2.1特征分析--自动生成 2.2.特征分析--选择处理 2.3特征分析--默认构造 3.C++11补丁--缺省值 三.析构函数 ...
- C++中的const成员函数介绍
List { 02 private: 03 Node * p_head; 04 int length; 05 -- 06 Public: 07 int Get ...
- const 修饰函数参数,返回值,函数体,保护数据
一.const 介绍 1.const 定义 const 修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的. 2.const 目的 const 推出的初始目的,正是为了取代预编译指令,消除 ...
- private修饰的变量如何调用_梳理c++ const 修饰函数
const是衡量一个程序员是否老道的一个标准,除了修饰变量之外,还可以修饰函数,主要有以下几种形式 const int& fun(int& a); //修饰返回值 int& f ...
- Item 16: 让const成员函数做到线程安全
本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 如果我们在数学领域里工作,我们可能会发现用一个类来表示多项式会很方 ...
- JavaScript实现闭式函数计算特定位置的斐波那契数fibonacciNthClosedForm算法(附完整源码)
JavaScript实现闭式函数计算特定位置的斐波那契数fibonacciNthClosedForm算法(附完整源码) fibonacciNthClosedForm.js完整源代码 fibonacci ...
- ES6基础(var let const 箭头函数)-学习笔记
文章目录 ES6基础(var let const 箭头函数)- 学习笔记 定义:var let const 箭头函数 数据结构 set map ES6基础(var let const 箭头函数)- 学 ...
- python search函数 中文_python使用正则表达式的search()函数实现指定位置搜索功能...
前面学习过search()可以从任意一个文本里搜索匹配的字符串,也就是说可以从任何位置里搜索到匹配的字符串.但是现实世界很复杂多变的,比如限定你只能从第100个字符的位置开始匹配,100个字符之前的不 ...
- C++ 类的const成员函数
http://blog.csdn.net/wangshihui512/article/details/9823739 我们定义的类的成员函数中,常常有一些成员函数不改变类的数据成员,也就是说,这些函数 ...
最新文章
- 【团队】 冲刺一(10/10)
- Spring data jpa 条件查询-按时间段查询
- 【算法+OpenCV】基于opencv的直线和曲线拟合与绘制(最小二乘法)
- count 有条件 mysql_mysql 不同条件count ,多条件count()
- axios post body参数_09-axios
- 基于 Apache Flink + Hologres 的实时推荐系统架构解析
- asp.net core 自定义 Content-Type
- ELK6.0部署:Elasticsearch+Logstash+Kibana搭建分布式日志平台
- 当AI遇上云计算,北京 · DevRun 华为云开发者大会
- 大数据分析实战-信用卡欺诈检测
- 实战 | Java 流之Stream,Lambda以及日期
- 关于ie7下display:inline-block;不支持的解决方案
- 安装Ubuntu后找不到windows启动项的解决办法
- MySQL讲义第 48 讲——select 查询之查询练习(六)
- html5中display flex,display:flex属性
- 使用Vue前端框架实现知乎日报app
- FTX交易平台与AZA Finance达成合作,推动非洲数字经济发展
- Go语言debug调试
- 排序之路:快速排序和木桶排序
- 【转】写给欲采访刘丁宁事件的媒体
热门文章
- 阶段3 2.Spring_06.Spring的新注解_3 AnnotationConfigApplicationContext的使用
- 阶段3 1.Mybatis_07.Mybatis的连接池及事务_5 mybatis中使用poolead配置连接的原理分析...
- 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第4节 方法引用_7方法引用_数组的构造器引用...
- Java Netty 初步
- Merry Christmas
- chrome断点调试其他技巧
- 记录postgresql的学习
- 动态规划--矩阵链乘法
- python pip安装
- SDL如何嵌入到QT中?!