符号“&”和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在函数里不同位置的用法相关推荐

  1. const对象不能调用非const成员函数

    在C++中,可以用const来定义一个const对象,但const对象不可以调用类中的非const成员函数 原因 引发原因:: 由调用成员函数时隐式传入的当前对象的this指针引起. 非const成员 ...

  2. 【C++】类和对象【中篇】--C++六个默认成员函数以及const成员函数

    文章目录 一.类的6个默认成员函数 二.构造函数 1.概念 2.特性 2.1特征分析--自动生成 2.2.特征分析--选择处理 2.3特征分析--默认构造 3.C++11补丁--缺省值 三.析构函数 ...

  3. C++中的const成员函数介绍

     List { 02 private: 03      Node * p_head; 04      int length; 05      -- 06 Public: 07      int Get ...

  4. const 修饰函数参数,返回值,函数体,保护数据

    一.const 介绍 1.const 定义 const 修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的. 2.const 目的 const 推出的初始目的,正是为了取代预编译指令,消除 ...

  5. private修饰的变量如何调用_梳理c++ const 修饰函数

    const是衡量一个程序员是否老道的一个标准,除了修饰变量之外,还可以修饰函数,主要有以下几种形式 const int& fun(int& a); //修饰返回值 int& f ...

  6. Item 16: 让const成员函数做到线程安全

    本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 如果我们在数学领域里工作,我们可能会发现用一个类来表示多项式会很方 ...

  7. JavaScript实现闭式函数计算特定位置的斐波那契数fibonacciNthClosedForm算法(附完整源码)

    JavaScript实现闭式函数计算特定位置的斐波那契数fibonacciNthClosedForm算法(附完整源码) fibonacciNthClosedForm.js完整源代码 fibonacci ...

  8. ES6基础(var let const 箭头函数)-学习笔记

    文章目录 ES6基础(var let const 箭头函数)- 学习笔记 定义:var let const 箭头函数 数据结构 set map ES6基础(var let const 箭头函数)- 学 ...

  9. python search函数 中文_python使用正则表达式的search()函数实现指定位置搜索功能...

    前面学习过search()可以从任意一个文本里搜索匹配的字符串,也就是说可以从任何位置里搜索到匹配的字符串.但是现实世界很复杂多变的,比如限定你只能从第100个字符的位置开始匹配,100个字符之前的不 ...

  10. C++ 类的const成员函数

    http://blog.csdn.net/wangshihui512/article/details/9823739 我们定义的类的成员函数中,常常有一些成员函数不改变类的数据成员,也就是说,这些函数 ...

最新文章

  1. 【团队】 冲刺一(10/10)
  2. Spring data jpa 条件查询-按时间段查询
  3. 【算法+OpenCV】基于opencv的直线和曲线拟合与绘制(最小二乘法)
  4. count 有条件 mysql_mysql 不同条件count ,多条件count()
  5. axios post body参数_09-axios
  6. 基于 Apache Flink + Hologres 的实时推荐系统架构解析
  7. asp.net core 自定义 Content-Type
  8. ELK6.0部署:Elasticsearch+Logstash+Kibana搭建分布式日志平台
  9. 当AI遇上云计算,北京 · DevRun 华为云开发者大会
  10. 大数据分析实战-信用卡欺诈检测
  11. 实战 | Java 流之Stream,Lambda以及日期
  12. 关于ie7下display:inline-block;不支持的解决方案
  13. 安装Ubuntu后找不到windows启动项的解决办法
  14. MySQL讲义第 48 讲——select 查询之查询练习(六)
  15. html5中display flex,display:flex属性
  16. 使用Vue前端框架实现知乎日报app
  17. FTX交易平台与AZA Finance达成合作,推动非洲数字经济发展
  18. Go语言debug调试
  19. 排序之路:快速排序和木桶排序
  20. 【转】写给欲采访刘丁宁事件的媒体

热门文章

  1. 阶段3 2.Spring_06.Spring的新注解_3 AnnotationConfigApplicationContext的使用
  2. 阶段3 1.Mybatis_07.Mybatis的连接池及事务_5 mybatis中使用poolead配置连接的原理分析...
  3. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第4节 方法引用_7方法引用_数组的构造器引用...
  4. Java Netty 初步
  5. Merry Christmas
  6. chrome断点调试其他技巧
  7. 记录postgresql的学习
  8. 动态规划--矩阵链乘法
  9. python pip安装
  10. SDL如何嵌入到QT中?!