对象常引用的问题c++语言

问题描述

对象常引用的问题c++语言

#include
using namespace std;
class Time
{
public:
Time(int h,int m,int s):hour(h),minute(m),sec(s){}
int hour;
int minute;
int sec;
};
void fun(Time &)
{t.hour=18;}
int main()
{
Time t1(10,13,56);
fun(t1);
cout<<t1.hour<<endl;
return 0;
}
此时fun函数形参是是实参的引用,t1.hour可以被修改。如果把fun函数改为void fun(const Time &t),此时函数不能修改t1的值。
我想问 fun函数写成void fun(Time t),同样可以做到函数不能修改t1的值,那这个常引用存在的意义是什么?或者请哪位大神可以举一个常引用应用的例子

解决方案

1,从性能上来说,使用引用只传一个地址就可以了,而传参数则需要拷贝一份数据后再传递给函数,
所以使用引用会更好
2,从软件设计上来讲,使用常引用,首先是给调用此接口的用户一个约定,不会改变参数的值,其次是为了和
非常引用区别,强制让设计者再编写或者修改接口的时候也要遵守这个约定。

望采纳,希望能帮到你。

解决方案二:

你传一个Time对象的时候,系统是把Time的内容完整的Copy到被调用函数。你传一个constTime&的时候,系统是把一个指针传给被调用函数,这两个的效率比较你应该就可以明白了。

解决方案三:

引用就是实参的别名,他们指向的是内存中的同一段,引用的目的就是为了能在函数中对实参进行操作,常引用不是违背了引用的初衷吗?

解决方案四:

关键在函数内部的处理代码,如果不是 const 则可以修改;反之,则不能修改。

解决方案五:

常引用存在的意义在于效率。

时间: 2024-07-28 17:43:43

对象常引用的问题c++语言的相关文章

C++中对象的常引用、动态建立和释放相关知识讲解_C 语言

C++对象的常引用 我们知道,一个变量的引用就是变量的别名.实质上,变量名和引用名都指向同一段内存单元. 如果形参为变量的引用名,实参为变量名,则在调用函数进行虚实结合时,并不是为形参另外开辟一个存储空间(常称为建立实参的一个拷贝), 而是把实参变量的地址传给形参(引用名),这样引用名也指向实参变量. [例] 对象的常引用. #include <iostream> using namespace std; class Time { public: Time(int,int,int); int

C++中对象的常引用总结_C 语言

直接传递对象名 用对象名做函数参数时,在函数调用时将建立一个新的对象,它是形参对象的拷贝. ================下面给出一个直接传递对象名的例子程序1.1================== 复制代码 代码如下: #include<iostream>using namespace std;class Time { public:  Time(int,int,int);//构造函数   void Print();//输出信息函数   void reset(Time t);//重置函数

对象更有用的玻璃罩——常引用

原创案例讲解--"玻璃罩const"系列的三篇文章: 1. 使用常对象--为共用数据加装一个名为const的玻璃罩 2. 常(const)+ 对象 + 指针:玻璃罩到底保护哪一个 3. 对象更有用的玻璃罩--常引用 本文讲在基于对象的程序设计中,函数中传递参数使用更广泛的技术,利用引用及常引用的话题. 先从引用的作用开始谈起. 一.引用用在参数传递中的优势:带回修改值及节省开支 先从一个经典的例子开始. 假如现在要交换两个整数,编写出的程序如下: //程序1 #include <

PHP对象相互引用的内存溢出

使用脚本语言最大的好处之一就是可利用其拥有的自动垃圾回收机制(释放内存).你不需要在使用完变量后做任何释放内存的处理,PHP会帮你完成. 当然,我们可以按自己的意愿调用 unset() 函数来释放内存,但通常不需要这么做. 不过在PHP里,至少有一种情况内存不会得到自动释放,即便是手动调用 unset().详情可考:http://bugs.php.net/bug.php?id=33595. 问题症状 如果两个对象之间存在着相互引用的关系,如"父对象-子对象",对父对象调用 unset(

php的变量、函数、对象的引用

在PHP 中引用的意思是:不同的名字访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容在内存中存放的地址 变量的引用 PHP 的引用允许你用两个变量来指向同一个内容 [php] $a="ABC"; $b =&$a; echo $a;//这里输出:ABC echo $b;//这里输出:ABC $b="EFG"; echo $a;//这里$a的值变为EFG 所以输出EFG echo $b;//这里输出EFG ?> [/p

javascript-JavaScript中对象的引用是什么意思?主要是这个引用是什么意思?

问题描述 JavaScript中对象的引用是什么意思?主要是这个引用是什么意思? JavaScript中对象的引用是什么意思?主要是这个引用是什么意思? 我是在看原型的概念的时候看到的这句话,他说的是,[原型是对象的一个引用]这句话应该怎么解释呢? 解决方案 这里有两个概念混淆了 类-对象 实体-引用 类是对象的抽象定义 对象是类的具现化 如 人 <-> 张三.李四 实体和引用的关系 类比 你家 <-> 你家的地址 回到问题上 1 JS是对象语言,不是面向对象语言,所以它通过函数来

c++-复制构造函数的形参,常引用

问题描述 复制构造函数的形参,常引用 C++中,复制构造函数为什么要用"常引用"作形参,而不是"引用"?谢谢啦 解决方案 复制构造函数中不能修改的内容,是p的成员变量,即p.pointer的值.也就是说,你不能使p.pointer指向别的位置.即下面这段代码会报错: Pstu(const Pstu& p) { pointer = p.pointer; p.pointer = NULL; //这句代码会报错 cout << "此时coun

什么是对象的引用

问题描述 初学面向对象编程,不了解什么是对象的引用请大虾们指导 解决方案 解决方案二:个人理解,就是指向内存的指针解决方案三:还是没明白可以具体一点嘛解决方案四:Stringss="GG";像上面的代码:声明了一个字符串"GG"对象,而ss就是字符串"GG"对象的引用:PS:有不对的望高手指正!!!解决方案五:对象引用,简单来说就是对象的变量.指向堆内存,而变量自己保存在栈里.解决方案六:对象的引用是不是和创建一个对象的意思差不多啦?解决方案七:

javase-对象与对象的引用,求大神指点

问题描述 对象与对象的引用,求大神指点 public class T1{class Child{ int no;Child nextChild=null;public Child(int no){this.no=no;}}class CycLink{Child temp=null;Child firstChild=null;public void create(){for(int i=1;i<=5;i++){if(i==1){Child ch=new Child(i);this.temp=ch;