返回引用

istream &read(istream &is,Sales_data &item)
{
    double price = 0;
    is>>item.bookNo>>item.units_sold>>price;
    item.revenue = price * item.units_sold;
    return is;
}

这个时候is是经过函数参数传过来的,其实本质上不会随着函数的结束而灭亡,所以是要返回的,但是有的却不是这样,局部引用用完后销毁掉的,所以就不能作为返回值的。

class Screen
{
public:
    typedef std::string::size_type pos;
    Screen(pos ht,pos wd,char c):height(ht),width(wd),contents(ht*wd,c){}
    char get() const{return contents[cursor];}
    inline char get(pos ht,pos wd) const;
    Screen &move(pos r,pos c);
private:
    pos cursor;
    pos height,width;
    std::string contents;
};

char get() const函数是一个常成员函数,他只能访问类成员而不能去改变成员的值呀。除非成员定义成mutable,否则真是没办法的事。当然很重要的一部分就是常成员函数对于this指针,将this指针从常量指针变成了指向常量的常量指针。

今天看了一天的return *this,简单点,const成员函数返回的是常量引用,如果不是const成员函数就不是常量引用。

时间: 2024-10-12 10:38:54

返回引用的相关文章

C++函数返回引用、非引用以及临时变量的问题

C++中新增了引用类型,所以函数的返回值可以是引用类型.那么就会有人想问 返回引用类型与返回非引用类型有区别吗? 结论是显然的,而且有明显的区别.尤其初学者会很容易绕进去.让我们先看四个函数原型.以int类型来举例 (1) int fun(...) { return ....//后面跟的是一个引用 } 例如:int fun(int &a) { return a; } (2)int fun(...) { return....//后面跟的是一个非引用 } 例如:int  fun(int a) { r

C++返回引用的函数

要以引用返回函数值,则函数定义时的格式如下: 类型标识符&类型名 (形参列表及类型说明) { 函数体 } 用const限定引用的声明方式为: const 类型标识符&引用名=目标变量名: 用这种方式声明的引用不能通过引用对目标变量的值进行修改,从而使引用的目标成为const,保证了 引用的安全性. 注意几点: 要以引用返回函数值,则定义函数时需要在函数名前加上&. 用引用返回一个函数值的最大好处是:在内存中不产生被返回值的副本:而用普通的返回值的方法返回一个函数的函数值时,需要在内

返回引用和对象遇到的坑

在leet code上做题遇到了一个坑,算法总认为自己写得没有问题,处理流程造就烂熟于心,用X code调试发现还是疏忽了:C++返回引用和返回对象的差别,在一个函数结束的地方返回了一个临时对象的引用! 根据以往的经验,引用是C++程序中高效能的法宝,节省了对象复制拷贝时的开销,但是滥用引用也会导致意想不到的错误.例如以下的代码: // 从一个字符串中,从后向前查找一个单词 // @s 源字符串// @index : 查找字符串起始位置的脚标// 返回查找得到的单词,没有找到单词时返回一个含有空

php函数返回引用示例

<?php class Test { public $userCache; public function init() { for($i = 0; $i < 5; $i++) { $user = array( 'name' => "joe$i", 'age' => 23 + $i, ); $this->userCache[] = $user; } } public function displayArray($arr = '') { if( gettyp

关于C++函数思考2(函数返回引用和返回非引用的区别)

引用是提高代码效率的一大利器,尤其对于对象来说,当引用作为参数时候不用大面积的复制对象本身所造成的空间与时间的浪费.所以有时候对于参数的返回值我们也希望返回参数的引用.在这里我们回忆一下C语言函数返回局部变量所注意的方面,也可以看我的这篇文章.下来我们对于C++ 中函数返回引用或非引用进行探讨!! 1.返回引用 /********************************************************************** * * Copyright (c)2015

PHP 的 返回引用(方法名前加&) 和 局部静态变量(static)

先阅读手册==========从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用操作符 & : 例子 17-13. 由函数返回一个引用 <?php   function &returns_reference()   {       $someref = 0;       return $someref;   }      $newref = &returns_reference();//相当于 $newref = &$someref;   ?>

C++ 成员函数返回引用,三种获取返回值的效果

这个实验需要以下的代码: class Test { public: Test(){cout << "Test" << endl;} ~Test(){cout << "~Test" << endl;} Test(const Test &right) { cout << "Test(const)" << endl; this->a = right.a; } Test

c++返回引用是否是真的引用

c++返回的引用是真的引用吗? 当然了,这不是屁话吗,然而 int& Test() { static int a=0; std::cout << a << std::endl; return a; } int _tmain(int argc, _TCHAR* argv[]) { int b = Test(); // 输出0 b = 1; Test(); // 还是输出0 getchar(); return 0; } 返回的是引用(注意a必须是static),但是修改了b却没

c++中有些重载运算符为什么要返回引用

事实上,我们的重载运算符返回void.返回对象本身.返回对象引用都是可以的,并不是说一定要返回一个引用,只不过在不同的情况下需要不同的返回值. 那么什么情况下要返回对象的引用呢? 原因有两个: 允许进行连续赋值 防止返回对象(返回对象也可以进行连续赋值)的时候调用拷贝构造函数和析构函数导致不必要的开销,降低赋值运算符等的效率. 对于第二点原因:如果用”值传递“的方式,虽然功能任然正确,但由于return语句要把*this拷贝到保存返回值的外部存储单元之中,增加了不必要的开销,会降低赋值函数的效率

c++赋值运算符为什么要返回引用?

为什么赋值运算符要返回引用??因为赋值操作会改变左值,而 + 之类的运算符不会改变操作数,所以说赋值运算符重载要返回引用以用于类似 (a=b)=c 这样的再次对a=b进行写操作的表达式.+ 返回一个临时对象是合情合理的 ,你若返回引用大多数情况下也不会出错或导致某个操作数被意外修改,但这就使(a+b)=c这样的表达式可以出现,这就有点不符合约定了,当然,你也可以让 + 返回一个常引用.  在面向对象程序设计中,对象间的相互拷贝和赋值是经常进行的操作.    如果对象在申明的同时马上进行的初始化操