C++的赋值运算符的重载问题

C++语言 码拜 8年前 (2016-06-06) 1316次浏览
先上代码

#include<iostream>
using namespace std;
class test
{
public:
  int t;
  test(void)
  {
    t=0;
  }
  /*
  test& operator=(test& a)
  {
    this->t = a.t+1;
    return *this;
  }
  */
};
int main()
{
  test a;
  a=test();
  return 0;
}

C++的类有默认的赋值运算,也就是说可以不用本人手写operator=的重载也可以直接运行

a=test();

但是,本人试着本人重写了赋值运算符,也就是注释中的部分,结果就报错了。
错误原因是,引用作为参数,不能传入临时对象,也就是说,必须这样使用

test b;
a=b;

那么,本人的问题是,怎么样手写赋值运算符,使得其可以支持

a=test();

这种使用方法?

解决方案

20

test& operator=(const test& a)   //const引用才能接收临时变量即右值,引用不接受右值。
{
this->t = a.t+1;
return *this;
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++的赋值运算符的重载问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)