赋值运算符函数的返回值类型详解

在c++赋值运算符函数的学习中,对于返回值类型的问题,一直非常费解,今天彻底总结一些每种不同返回值类型的结果:

1、当返回值为空时:

<span style="font-size:14px;">void hasptr::operator=(const hasptr& s)</span>

这个时候如果只有一个‘=’(a = b)运算那就没问题,但是如果存在‘=’(a = b = c)的链式操作时,编译器就会报错

我们看:a = b = c;

程序会先运行 b = c;

因为函数的返回值为viod , 所以 b = c这个操作就会返回一个NULL

那么这是 a = (b = c) 也就是 a = NULL , 这种操作时不存在的 , 即使是存在也不符合我们对这个操作的初衷。

2、当返回值是 类本身时:

<span style="font-size:14px;">hasptr hasptr::operator=(const hasptr& s)</span>

支持‘=’的链式操作

如果返回值是类本身 , 那么这个函数运行的过程是:

1、进入函数内部,运行函数内部的操作

2、函数内部的操作运行完之后,调用类的拷贝构造函数,把对象拷贝给一个新的对象

3、返回那个新建立的对象

这里是关键是,每运行一次赋值运算符函数,就要调用一次拷贝构造函数,这样不仅会浪费时间。

如果类中没拷贝构造函数,有时候还会出错。

3、当返回值是引用时

<span style="font-size:14px;">hasptr &hasptr::operator=(const hasptr& s)</span>

这种方式是最好的 , 即支持链式操作,还把操作时间降到了最低

完整代码:

<span style="font-size:14px;">hasptr &hasptr::operator=(const hasptr& s)
{
    i = s.i;
    string *x = new string(*s.ps);
    delete ps;
    ps = x;
    return *this;
}</span>

赋值运算符函数的返回值类型详解,布布扣,bubuko.com

时间: 2024-10-14 18:35:45

赋值运算符函数的返回值类型详解的相关文章

JAVA函数的返回值类型详解以及生成随机数的例题

函数的四要素:函数名.输入.输出(返回).加工. 函数分为两种:一种是有返回值得函数,一种是没有返回值的函数. 1. 定义:没有返回值的函数:(当我不需要函数的计算结果再拿出来进行运算的时候,我就不需要有返回值,直接在函数中运算完成加工即可) static void 函数名(参数){ 函数体 } 调用:调用没有返回值的函数: 函数名(实际参数): 在函数中的参数叫做虚参,我们需要给他一个实际的参数才能完成整个运算流程. 例如:我要打印一两个数字的和? public class HS { publ

[转]C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解

本文转自:http://www.cnblogs.com/landeanfen/p/5501487.html 阅读目录 一.void无返回值 二.IHttpActionResult 1.Json(T content) 2.Ok(). Ok(T content) 3.NotFound() 4.其他 5.自定义IHttpActionResult接口的实现 三.HttpResponseMessage 四.自定义类型 五.总结 正文 前言:已经有一个月没写点什么了,感觉心里空落落的.今天再来篇干货,想要学

Web Api 接口返回值不困惑:返回值类型详解

前言:已经有一个月没写点什么了,感觉心里空落落的.今天再来篇干货,想要学习Webapi的园友们速速动起来,跟着博主一起来学习吧.之前分享过一篇 WebApi 接口参数:传参详解,这篇博文内容本身很基础,没想到引起很多园友关注,感谢大家的支持.作为程序猿,我们都知道参数和返回值是编程领域不可分割的两大块,此前分享了下WebApi的传参机制,今天再来看看WebApi里面另一个重要而又基础的知识点:返回值.还是那句话:本篇针对初初使用WebApi的同学们,比较基础,有兴趣的且看看. 使用过Webapi

C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解

原文地址:http://www.cnblogs.com/landeanfen/p/5501487.html 使用过Webapi的园友应该都知道,Webapi的接口返回值主要有四种类型 void无返回值 IHttpActionResult HttpResponseMessage 自定义类型 此篇就围绕这四块分别来看看它们的使用. 一.void无返回值 void关键字我们都不陌生,它申明方法没有返回值.它的使用也很简单,我们来看一个示例就能明白. public class ORDER { publi

WebApi 接口返回值不困惑:返回值类型详解。IHttpActionResult、void、HttpResponseMessage、自定义类型

首先声明,我还没有这么强大的功底,只是感觉博主写的很好,就做了一个复制,请别因为这个鄙视我,博主网址:http://www.cnblogs.com/landeanfen/p/5501487.html 使用过Webapi的园友应该都知道,Webapi的接口返回值主要有四种类型 void无返回值 IHttpActionResult     (需要MVC高版本才会支持,VS2012/2013不支持,请升级DLL文件或者到VS2015开发环境) HttpResponseMessage 自定义类型 此篇就

输入一个正数x和一个正整数n,求下列算式的值。要求定义两个调用函数:fact(n)计算n的阶乘;mypow(x,n)计算x的n次幂(即xn),两个函数的返回值类型是double

题目描述 输入一个正数x和一个正整数n,求下列算式的值.要求定义两个调用函数:fact(n)计算n的阶乘:mypow(x,n)计算x的n次幂(即xn),两个函数的返回值类型是double. x - x2/2! + x3/3! + ... + (-1)n-1xn/n! ×输出保留4位小数. 输入 x n 输出 数列和 样例输入 2.0 3 样例输出 1.3333 提示 无 来源 无 1 #include<stdio.h> 2 double fact(int); 3 double mypow(in

C++函数的返回值类型和参数类型

在C++中函数的定义为: type name(P1,P2) {stament}; 其中type为函数的返回值,name 为函数的标识符,P1,P2为函数的两个参数,该参数作用范围仅在该函数体内. 当一个函数不要返回任何值时,该函数为空函数,其类型为void,当该函数也没有参数时,也可以用void表示无参数,也可什么都不填,例如: void printmessage (void){  cout << "I'm a function!";} 定义了一个空函数,该函数无返回值,且

window.showModalDialog返回值和window.open返回值实例详解

最近在谷歌浏览器下发现一个问题,就是使用谷歌浏览器已经不兼容window.showModalDialog了,所以还是改成使用window.open(). 一.window.showModalDialog实例: 1.父页面:js var returnValue=window.showModalDialog("selectUserList.jsp?order_id="+order_id+"&appID="+appID+"&prod_name=&

函数返回值return详解—JS学习笔记2015-6-16(第58天)

一.return return后面接的实际上就是一个数据类型: <script> // fn1(); =>100 alert(fn1().length); function fn1(){ // return 100; return 'miaov'; } </script> 1).函数名+(): fn1() ==> return后面的值: 2).return 实际上是所有函数内一个隐藏的属性,默认返回undefined: 3).return 后面的任何代码都不会执行. 二