首页
学习
活动
专区
工具
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++赋值操作符重载

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

58720
  • C++笔试面试题整理

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

    2.6K40

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

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

    66710

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

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

    10810

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

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

    14110

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

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

    1.8K30

    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、既然编译器生成默认赋值运算符重载函数已经可以完成字节序拷贝了,还需要自己实现吗?

    12010

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

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

    1.4K20

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

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

    11910

    精选 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.1K30

    c++面试题

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

    1.2K21

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

    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不是我们类型对象,所以也要通过友元函数方式来定义才能使用

    31920

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

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

    15710

    【C++类和对象】const成员函数及流插入提取

    前面我们学习过六大默认成员函数中四个——构造函数与析构函数以及拷贝构造与赋值运算符重载,今天我们继续学习剩下成员函数——取地址与const取地址操作符重载。...2.取地址以及const取地址操作符重载 这两个默认成员函数一般不用重新定义,编译器默认会生成; 在C++中,使用&操作符可以取得一个对象地址。...重载函数应该以ostream&类型作为返回值,并以一个 ostream&类型参数(通常是输出流对象)和要输出数据作为参数。 流提取运算符(>>)用于从输入流中提取数据。...重载函数应该以 istream&类型作为返回值,并以一个 istream&类型参数(通常是输入流对象)和要提取到数据引用作为参数。...在C++中流插入提取操作符重载是不可以重载成员函数,因为它们参数顺序不可以改变,例如: 这是因为流插入第一个运算符是cout,如果将其重载成员函数第一个参数就是类和对象中隐含this指针

    11010

    【C++】类与对象理解和学习(中)

    接下来我们先谈一谈创建规则 构造函数函数名与类名相同 无返回值 对象实例化时编译器自动调用对应构造函数。...谈一谈无穷递归问题 对于自定义类型,在传传参时候会·产生拷贝构造,调用拷贝构造函数又需要传参,传传参又会产生拷贝构造......那么什么是运算符重载呢?实际上运算符重载是具有特殊函数名函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通函数类似。...函数原型:返回值类型 operator操作符(参数列表) 这里还有以下几点需要注意: 不能通过连接其他符号来创建新操作符:比如operator@ 重载操作符必须有一个类类型参数 用于内置类型运算符...我们再来谈一谈赋值运算符重载 赋值运算符重载是属于运算符重载一种,我们需要注意以下几点: 参数类型:const T&,传递引用可以提高传参效率 返回值类型:T&,返回引用可以提高返回效率,有返回值目的是为了支持连续赋值

    52530

    【细品C++】深入了解类和对象(六大默认成员函数以及操作符重载

    特性 构造函数是特殊成员函数,需要注意是,构造函数虽然名称带有构造,但是构造函数主要任务并不是开空间创建对象,而是初始化对象。以下是构造函数特性: 函数名与类名相同。 无返回值。...在这一点上,构造函数和其他普通函数是一样给内置类型成员对象设置默认同样也可以使用。 但是,这样方式好不好呢?像malloc这样函数需要对返回值进行检查,以这样方式,如何对返回值检查?...(当然如果你对函数重载概念不太清晰或者想了解其原理的话可以看看我这篇文章) C++为了增强代码可读性引入了操作符重载,运算符重载是具有特殊函数名函数,也具有其返回值类型,函数名字以及参数列表,...函数名字:关键字(保留字)operator******后面接需要重载运算符符号** 函数原型:返回值类型 operator******操作符(参数列表)** 注意: 不能通过连接其他符号来创建新操作符...const成员 将**const**修饰成员函数”称之为**const**成员函数(注意这里不是说const修饰返回值类型),const修饰类成员函数,实际修饰该成员函数隐含**this**指针,

    81520

    C++复习篇

    参数表不同主要有以下几种 1) 参数个数不同 2) 参数类型不同 3) 参数顺序不同 注意: 重载函数需要避免使用参数默认 调用重载函数时,只会匹配函数参数表,与函数返回值无关 函数重载必须发生在同一个作用域中...18.通过()操作符重载实现:函数对象 函数对象是指该对象具备函数行为 函数对象,是通过()调用操作符声明得到,然后便能通过函数方式来调用该对象了. ()调用操作符可以定义不同参数多个重载函数 (...)调用操作符只能通过类成员函数重载(不能通过全局函数) 示例: class Test{ public:   void operator () (void) //通过()重载操作符,来使对象具备函数行为...函数模板也支持多参数,示例如下(如果定义了返回值模板,则必须要显示指定返回值类型,因为编译器不知道到底返回什么类型): #include using namespace std;...不能指向堆数组(因为auto_ptr析构函数删除指针用是delete,不是delete[]) auto_ptr构造函数为explicit类型,所以只能显示初始化 提供get()成员函数,可以用来查看类里指针地址

    1.3K20
    领券