首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有没有办法获得重载操作符的返回值->而不是它的成员值?

在C++中,重载操作符的返回值通常是操作符所定义的类型的一个实例。这意味着返回值是操作符的成员值,而不是操作符本身的返回值。然而,有一种方法可以获得重载操作符的返回值,即通过使用临时变量来捕获操作符的返回值。

举个例子,假设我们有一个自定义的类MyClass,并重载了加法操作符+。我们想要获得两个MyClass对象相加的结果,而不是将结果赋值给另一个对象。我们可以通过创建一个临时变量来实现这一点,如下所示:

代码语言:txt
复制
MyClass obj1(5);
MyClass obj2(10);

MyClass result = obj1 + obj2;  // 将结果赋值给另一个对象

// 或者使用临时变量来捕获返回值
MyClass temp = obj1 + obj2;
MyClass& result = temp;  // 引用临时变量

// 现在我们可以使用result变量来访问返回值

在这个例子中,我们通过创建一个临时变量temp来捕获obj1 + obj2的返回值。然后,我们可以使用result变量来访问这个返回值。

需要注意的是,临时变量的生命周期是有限的,它们在使用完毕后会被销毁。因此,如果想要持久地保存重载操作符的返回值,需要将其赋值给一个持久的对象。

这是一种常见的技巧,可以用于获得重载操作符的返回值。然而,需要注意的是,这种方法可能会导致性能上的一些开销,因为需要创建和销毁临时变量。因此,在使用时需要权衡利弊。

腾讯云相关产品和产品介绍链接地址:

请注意,以上仅为腾讯云的一些相关产品,其他云计算品牌商也提供类似的产品和服务。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++笔试面试题整理

const修饰函数返回值:如果给“指针传递”函数返回值加const,则返回值不能被直接修改,且该返回值只能被赋值给const修饰同类型指针。...精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量不是使用保存在寄存器里备份。...(4)流操作符重载返回值申明为“引用”作用: 流操作符>,这两个操作符常常希望被连续使用,例如:cout << "hello" << endl;因此这两个操作符返回值应该是一个仍然支持这两个操作符流引用...这个操作符象流操作符一样,是可以连续使用,例如:x = j = 10;或者(x=10)=100;赋值操作符返回值必须是一个左,以便可以被继续赋值。因此引用成了这个操作符惟一返回值选择。...函数重载是一个同名函数完成不同功能,编译系统在编译阶段通过函数参数个数、参数类型不同,函数返回值来区分该调用哪一个函数,即实现是静态多态性。但是记住:不能仅仅通过函数返回值不同来实现函数重载

2.6K40
  • C++赋值操作符重载

    1.赋值操作符重载原因 赋值操作符是一个使用频率最高操作之一,通常情况下意义十分明确,就是将两个同类型变量从一端(右端)传到另一端(左端)。...赋值操作符重载注意事项 赋值操作符只能通过类成员函数形式重载。这就说明了,如果要将用户自定义类型传递给基本数据类型变量,只能通过类型转换机制,不能利用重载来实现。...进行深拷贝时,一般对象a和b有相同数据类型。如果在进行赋值时发生深拷贝,就一定要对赋值操作符进行重载,否则赋值运算符就会按赋值常规语义进行(成员变量之间传递数据),不发生深拷贝。考察如下例子。...(2)类拷贝构造函数虽然与赋值操作符不是一回事,但通常可以在拷贝构造函数中利用赋值操作符重载,以避免对两个对象之间传递数据重复解释。...(5)最赋值操作符进行重载时,通常将操作符函数返回值定义为赋值左操作数类型引用。这是为了实现对赋值表达式求值,还有一个目的就是为了实现链式操作。

    59020

    C++赋值操作符重载简介

    1.赋值操作符重载原因 赋值操作符是一个使用频率最高操作之一,通常情况下意义十分明确,就是将两个同类型变量从一端(右端)传到另一端(左端)。...赋值操作符重载注意事项 赋值操作符只能通过类成员函数形式重载。这就说明了,如果要将用户自定义类型传递给基本数据类型变量,只能通过类型转换机制,不能利用重载来实现。...进行深拷贝时,一般对象a和b有相同数据类型。如果在进行赋值时发生深拷贝,就一定要对赋值操作符进行重载,否则赋值运算符就会按赋值常规语义进行(成员变量之间传递数据),不发生深拷贝。考察如下例子。...(2)类拷贝构造函数虽然与赋值操作符不是一回事,但通常可以在拷贝构造函数中利用赋值操作符重载,以避免对两个对象之间传递数据重复解释。...(5)最赋值操作符进行重载时,通常将操作符函数返回值定义为赋值左操作数类型引用。这是为了实现对赋值表达式求值,还有一个目的就是为了实现链式操作。

    71910

    【C++初阶】一文讲通默认成员函数~类和对象(中)

    构造函数本质是要替代我们以前在数据结构初阶中写Init()函数功能,而且构造函数自动调用特点就更好地替代了。 构造函数特点: 函数名与类名相同。 无返回值。...,通过同类型对象初始化构造,不是指针 Date d3(d1); d3.Print(); //也可以这样写,这里也是拷贝构造,C++支持这样写法 Date d4 = d1; d4.Print...如果一个重载运算符函数是成员函数,则第一个运算对象默认传给隐式this指针,因此运算符重载作为成员函数时,参数比运算对象少一个。...有返回值,且建议写成当前类类型引用,引用返回可以提高效率,有返回值目的是为了支持连续赋值场景。..., get 三个成员函数都没有被 const 修饰,那么当d调用成员函数get_year()时,会传给Date*const this,也就是发生了权限放大(this指针可以修改成员变量,d不可以

    10910

    【C++】类和对象(第二篇)

    构造函数无返回值 要注意这里说返回值不是说返回类型是void,而是根本就不写返回类型。...那现在我们学了C++,有没有什么好办法可以帮助我们解决这个问题呢? 可不可以像上面的构造函数自动初始化一样自动对对象中资源进行清理呢?...~是啥,在C语言中是不是按位取反啊,表示功能和构造函数是相反。 无返回值且无参数 和构造函数一样,析构函数也是没有返回值,并且析构函数还没有参数。...概念 C++为了增强代码可读性引入了运算符重载,运算符重载是具有特殊函数名函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通函数类似。...函数名字为:关键字operator后面接需要重载运算符符号 函数原型:返回值类型 operator操作符(参数列表) 那我们接下来就来练习一下: 上面我们不是相比较两个日期类对象是否相等嘛,那我们就来重载一下

    11010

    【C++】类六大默认成员函数及其特性(万字详解)

    注意:析构函数不能重载 如下析构函数,因为析构函数特性第一点规定了析构函数函数名只能是~+类名,第二点规定无参数无返回值,则限制了析构函数不能够像构造函数那样重载,即一个类只能有一个析构函数...函数原型:返回值类型 operator操作符(参数列表) 注意: 不能通过连接其他符号来创建新操作符:比如operator@ 重载操作符必须有一个类类型参数 用于内置类型运算符,其含义不能改变,...然后对于引用返回值设计,主要是考虑到赋值操作符要兼容连等操作,如: d3 = d2 = d1; 这时如果函数返回值为void,则d3后'='运算符就没有右运算数了,为了兼容这种情况,我们可以将函数返回值设置为调用函数变量...赋值运算符重载函数特性思维导图: 取地址操作符重载 对于内置类型变量而言,取地址操作符可以获取到它们地址,而对于自定义类型变量而言,取地址操作符作用同样是获取到它们地址,自定义变量地址...const取地址操作符重载 const取地址操作符重载是取地址操作符一种重载形式,但它作用主要是为被const修饰变量获取const修饰地址,因为要出入保持一致,否则如果传入一个

    16110

    C++经典面试题(最全,面中率最高)

    声明一个引用,不是新定义了一个变量,只表示该引用名是目标变量名一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。不能建立数组引用。...(4)流操作符重载返回值申明为“引用”作用: 流操作符>,这两个操作符常常希望被连续使用,例如:cout << "hello" << endl; 因此这两个操作符返回值应该是一个仍然支持这两个操作符流引用...这个操作符象流操作符一样,是可以连续使用,例如:x = j = 10;或者(x=10)=100;赋值操作符返回值必须是一个左,以便可以被继续赋值。因此引用成了这个操作符惟一返回值选择。...对于联合不同成员赋值, 将会对其它成员重写, 原来成员就不存在了, 而对于结构不同成员赋值是互不影响。...sizeof(p),p 为指针得到是一个指针变量字节数,不是p 所指内存容量。C++/C 语言没有办法知道指针所指内存容量,除非在申请内存时记住

    1.9K30

    c++面试选择题_C语言经典笔试题

    声明一个引用,不是新定义了一个变量,只表示该引用名是目标变量名一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。不能建立数组引用。...(4)流操作符重载返回值申明为“引用”作用: 流操作符>,这两个操作符常常希望被连续使用,例如:cout << “hello” << endl; 因此这两个操作符返回值应该是一个仍然支持这两个操作符流引用...赋值操作符=,这个操作符象流操作符一样,是可以连续使用,例如:x = j = 10;或者(x=10)=100;赋值操作符返回值必须是一个左,以便可以被继续赋值。...因此引用成了这个操作符惟一返回值选择。...sizeof(p),p为指针得到是一个指针变量字节数,不是p 所指内存容量。C++/C 语言没有办法知道指针所指内存容量,除非在申请内存时记住

    1.1K10

    C++:类与对象(2)

    返回值。 特性3. 对象实例化时编译器自动调用对应构造函数。(由编译器完成) 特性4. 构造函数可以重载。...你在系统上看到就是200元不是你原来100万!)...5.1 运算符重载 C++为了增强代码可读性引入了运算符重载,运算符重载是具有特殊函数名函数,也具有其 返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通函数类似。...函数原型:返回值类型 operator操作符(参数列表) 注意事项: 1、不能通过连接其他符号来创建新操作符:比如operator@ 2、重载操作符必须有一个类类型参数 3、用于内置类型运算符...注意:内置类型成员变量是直接赋值自定义类型成员变量需要调用对应类赋值运算符重载完成赋值。 思考: 1、既然编译器生成默认赋值运算符重载函数已经可以完成字节序拷贝了,还需要自己实现吗?

    12910

    读完某C++神作,我只记下了100句话

    对于list对象应该优先使用list容器特有的成员版本【能添加删除元素】,不是泛型算法。 简单说,类就是定义了一个新类型和一个新作用域。成员访问级别默认私有。...初始化const或引用类型或没有默认构造函数类类型数据成员唯一机会是构造函数初始化列表【冒号开始,逗号分隔】。初始化顺序由定义顺序决定,不是初始化列表顺序。...声明不定义成员函数是合法,但是使用将导致链接失败。将复制构造函数声明为private可防止复制。定义了复制构造函数,也必须定义默认构造函数。 重载赋值操作符=,隐含第一个参数this。...使用算法sort等时会假定一些操作符(<)存在,此时要为类型定义重载操作符重载操作符如果是成员函数,左操作数必须是该类对象【一定是this】。 用函数或类操作某个类数据可设置其为友元。...对象不支持动态绑定,指针和引用支持但使用起来麻烦,解决方法是定义包装类或句柄类【提供到其它类接口类】。像使用指针一样使用句柄不用管理指向对象。类似智能指针方法建立指针句柄。

    1.4K20

    初识C++ · 类和对象(中)(2)

    1 赋值运算符重载 1.1运算符重载 在学习赋值运算符重载之前,我们先来介绍一下运算符重载: C++为了增加代码可读性,引用了运算符重载概念,运算符重载其实就是一个特殊一点点函数,返回值,参数,...其中,返回值,返回类型等都是根据实际情况操作,比如日期减日期,返回类型是int,因为返回值是相差天数,比如日期减天数,返回值就是日期类,因为返回值就是日期,所以实际返回值返回类型参数等都是看实际情况...当重载函数作为成员函数时候,因为成员函数都有个默认成员函数指针,所以形参看起来比操作数少一个。 sizeof ?: . ::这几个操作符好说,不能重载,不常见是....这里规定是先执行j =m,返回是j,再执行i = j,最后赋值完成,也就是说连续赋值需要表达式有一个返回值,比如j = m返回值就是j,那么执行重载连续赋值,就需要函数要有返回值: 那么j =...//+ -实现 Date operator+(int day); Date operator-(int day); 这里可以注意到是这两个函数返回值不是引用,上面的函数就是引用,因为生命周期

    9210

    c++面试题

    声明一个引用,不是新定义了一个变量,只表示该引用名是目标变量名一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。不能建立数组引用。...(4)流操作符重载返回值申明为“引用”作用: 流操作符>,这两个操作符常常希望被连续使用,例如:cout << "hello" << endl; 因此这两个操作符返回值应该是一个仍然支持这两个操作符流引用...赋值操作符=。这个操作符象流操作符一样,是可以连续使用,例如:x = j = 10;或者(x=10)=100;赋值操作符返回值必须是一个左,以便可以被继续赋值。...因此引用成了这个操作符惟一返回值选择。...此外,就是上面提到对函数传ref和pointer区别。 15.什么时候需要“引用”? 流操作符>、赋值操作符=返回值、拷贝构造函数参数、赋值操作符=参数、其它情况都推荐使用引用。

    1.2K21

    精选 30 个 C++ 面试题(含解析)

    (4)流操作符重载返回值申明为“引用”作用: 流操作符>,这两个操作符常常希望被连续使用,例如:cout << "hello" << endl; 因此这两个操作符返回值应该是一个仍然支持这两个操作符流引用...这个操作符象流操作符一样,是可以连续使用,例如:x = j = 10;或者(x=10)=100;赋值操作符返回值必须是一个左,以便可以被继续赋值。因此引用成了这个操作符惟一返回值选择。...根据前面提到引用作为返回值三个规则,第2、3两个方案都被否决了。静态对象引用又因为((a+b) == (c+d))会永远为true导致错误。所以可选只剩下返回一个对象了。...sizeof(p),p 为指针得到是一个指针变量字节数,不是p 所指内存容量。C++/C 语言没有办法知道指针所指内存容量,除非在申请内存时记住。...,有时候必须指定其返回值为const类型,以使得其返回值不为“左”。

    1.5K30

    C++从入门到精通——类6个默认成员函数之赋值运算符重载

    class Date {}; 一、运算符重载 定义 C++为了增强代码可读性引入了运算符重载,运算符重载是具有特殊函数名函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通函数类似...函数原型:返回值类型 operator操作符(参数列表) 注意: 不能通过连接其他符号来创建新操作符:比如operator@ 重载操作符必须有一个类类型参数 用于内置类型运算符,其含义不能改变...二、赋值运算符重载 赋值运算符重载格式 参数类型:const T&,传递引用可以提高传参效率 返回值类型:T&,返回引用可以提高返回效率,有返回值目的是为了支持连续赋值 检测是否自己给自己赋值...用户没有显式实现时,编译器会生成一个默认赋值运算符重载,以方式逐字节拷贝。 注意: 内置类型成员变量是直接赋值自定义类型成员变量需要调用对应类赋值运算符重载完成赋值。...友元函数使用应该谨慎,因为破坏了封装性原则,导致代码可读性和可维护性降低。在设计类时候,应该尽量避免使用友元函数,而是通过成员函数来操作类私有成员和保护成员

    12510

    框架设计原则和规范(四)

    a) 不要让属性返回快照集合,属性应该返回实况集合 b) 要用快照集合或实况IEnumerable(或其子类)来表示不稳定集合 8) 数组与集合之间选择 A.优先使用集合,不是优先使用数组...表示那些可以为""null“类型 1) 考虑用来表示那些可能不存在(比如可选) 2) 除非在类似的情况下,你会因为,引用类型可以为null,考虑用引用类型来代替,不要使用Nullable...Uri 1) 用System.Uri来表示URI和URL数据 2) 考虑为最常用带System.Uri参数成员提供基于字符串重载成员 3) 不要不加思索为所有基于System.Uri成员提供基于字符串重载成员...相等性操作符 1) 不要只重载相等性操作符一个 2) 要确保Object.Equals与相等性操作符具有完全相同语义及相近性能 3) 避免抛出异常 4) 类型相等性操作符 A.要重载类型相等性操作符...——如果相等性是有意义 5) 引用类型相等性操作符 A.避免重载可变引用类型相等性操作符 B.

    1.5K40

    C++重载操作符

    什么叫重载操作符?这要先说什么是操作符,其实最简单:+、-、*、/、<<就都是操作符,这些也是很常见重载操作符。 那什么叫重载操作符?.../ 注意返回值是Time类型,因为相加也是返回一个结果Time } 这样就写好方法了,这个方法是放在Time类方法里,调用如下: Time time1 = ......+(int h) { // 这里你可以看做是增加一小时方法 // 注意返回值是Time类型,因为相加也是返回一个结果Time } // 使用: Time time3 = time1 + 1;...但是我们可以用友元函数来解决这个问题,关于友元函数是什么这里只简单介绍一下: 类友元函数是非成员函数,因此不能用成员操作符来调用,在定义时也不需要使用::限定符,但它与成员函数访问权限相同,也就是可以访问类成员...是cout<<这个操作,因为我们经常需要输出信息,但是自定义类型不能直接这么用,往往要写一长串成员变量来输出,但是我们重载一下就可以了,同样,因为<<这个操作符左边是cout不是我们类型对象,所以也要通过友元函数方式来定义才能使用

    32120

    C++初阶 类和对象(下)

    为什么这个形参得是被类对象引用呢,我直接传递我这个要拷贝目标不可以吗,不是一样操作吗。...比方说,我们现在实现日期类拷贝构造函数,其实只是涉及到了一个简单拷贝,到后期我们使用什么栈啊,堆啊,二叉树之类东西,我们如果还是简单地进行拷贝,我们拷贝东西不就只有一具空壳吗,我们得采取一些方式实现深拷贝...注意: 1.不能通过连接其他符号来创建新操作符:比如operator@ 2.重载操作符必须有一个类类型参数 3.用于内置类型运算符,其含义不能改变,例如:内置整型+,不 能改变其含义 4...实现这个之前我们可以写一个GetMonthDay函数来获得没一月份天数,值得注意一点是闰年时2月为29日,接着我们来讲讲实现思路,我们返回值最好设置成Date&型,因为+=操作目标出了函数作用域在...main中依然存在,因此使用Date&类型返回值可以令编译器效率得到提高。

    16010

    【C++】类和对象(中):类默认成员函数,构造函数、析构函数、拷贝构造函数、运算符重载

    2.构造函数 构造函数是特殊成员函数,构造函数虽然名称叫构造,但是主要任务并不是开空间创建对象(我们常使用局部对象是栈帧创建时空间就开好了),而是对象实例化时初始化对象。...运算符重载我们建议还是写成成员函数。 3.运算符重载以后,优先级和结合性与对应内置类型运算符保持一致。 4.不能用语法中没有的符号来创建新操作符。...,成员函数回调时一个操作符(.*) 6.重载操作符至少有一个类类型参数,不能通过运算符重载改变内置类型对象含义。 7.要重载有意义运算符。...赋值运算符重载特点: 1.赋值运算符重载是一个运算符重载,规定必须重载成员函数。赋值运算符重载参数建议写成 const 当前类类型引用 ,可以减少传传参拷贝。...是不是重载函数就需要返回值啊。 //d3 = d1, 返回d3 Date& operator=(const Date& d) { _year = d._year; _month = d.

    8910

    【C++阅览室】类和对象

    注意:构造函数虽然叫构造函数,但其实只是用于初始化对象,不是开空间创造对象! 特征如下: 1. 函数名与类名相同。 2. 无返回值。 3. 对象实例化时编译器自动调用对应构造函数。 4....,也具有其 返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通函数类似。...函数原型:返回值类型 operator操作符(参数列表) 注意: 1.不能连接其他符号从而创造一个新操作符:如operator@ 2.重载操作符必须有一个类类型操作符 3.用于内置类型运算符时...赋值运算符重载格式 参数类型:const T&,传递引用可以提高传参效率 返回值类型:T&,返回引用可以提高返回效率,有返回值目的是为了支持连续赋值 检测是否自己给自己赋值 返回*this :要复合连续赋值含义...注 意:内置类型成员变量是直接赋值自定义类型成员变量需要调用对应类赋值运算符 重载完成赋值。

    5010
    领券