博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
符号“&”和const在函数里不同位置的用法
阅读量:5174 次
发布时间:2019-06-13

本文共 1913 字,大约阅读时间需要 6 分钟。

符号“&”和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

你可能感兴趣的文章
mysql_对于DQL 的简单举例
查看>>
35. Search Insert Position(C++)
查看>>
[毕业生的商业软件开发之路]C#异常处理
查看>>
有关快速幂取模
查看>>
NOI2018垫底记
查看>>
注意java的对象引用
查看>>
C++ 面向对象 类成员函数this指针
查看>>
NSPredicate的使用,超级强大
查看>>
自动分割mp3等音频视频文件的脚本
查看>>
判断字符串是否为空的注意事项
查看>>
布兰诗歌
查看>>
(转)Tomcat 8 安装和配置、优化
查看>>
(转)Linxu磁盘体系知识介绍及磁盘介绍
查看>>
跨域问题整理
查看>>
[Linux]文件浏览
查看>>
获取国内随机IP的函数
查看>>
Spring Mvc模式下Jquery Ajax 与后台交互操作
查看>>
(转)matlab练习程序(HOG方向梯度直方图)
查看>>
tableView
查看>>
Happy Great BG-卡精度
查看>>