V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
peiqing9003ah
V2EX  ›  C++

拷贝赋值运算符 为啥非要返回个引用

  •  
  •   peiqing9003ah · 2019-11-30 17:08:48 +08:00 · 3435 次点击
    这是一个创建于 1822 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近学 C++, 拷贝赋值运算符 返回值完全可以是空。

    代码如下, 我总结这只是个函数调用, 没有返回值一般没啥特别的鸟问题。

    using namespace std;

    class A { public : int Aa; int Ab; public: A(int i, int k):Aa(i), Ab(k) {

    }
    A & operator ==(const A& rhs)
    {
    	cout << "这儿有一句傻逼代码" << endl;
    	return *this;
    }
    A &  operator >=(const A& rhs)
    {
    	cout << "这儿有另外一句傻逼代码" << endl;
    	Aa = rhs.Aa;
    	Ab = rhs.Ab;
    	return *this;
    }
    void  operator =(const A& rhs)
    {
    	cout << "这儿有一个拷贝赋值的傻逼代码" << endl;
    	Aa = rhs.Aa;
    	Ab = rhs.Ab;
    	//return *this;
    }
    

    }; int main() { std::cout << "Hello World!\n"; A *p1 = new A(1, 3); A *p = new A(2, 3);

    A b(331,332);
    cout << "B" << b.Aa << endl;
    cout << "B" << b.Ab << endl;
     b = *p;
    cout << "B"<<b.Aa << endl;
    cout << "B"<<b.Ab << endl;
    

    }

    为啥 我看人家开源项目中的拷贝赋值运算符, 一般都非要返回个引用 有老铁总结下这块吗?

    5 条回复    2019-12-01 00:03:26 +08:00
    ifanze
        1
    ifanze  
       2019-11-30 17:13:27 +08:00   ❤️ 1
    ```
    A a = xxxx;
    A b;
    A c;
    c = b = a;
    ```
    secondwtq
        2
    secondwtq  
       2019-11-30 18:08:59 +08:00
    那说明你还需要继续学 C++(或者放弃学 C++)
    C++ 就是这样,它不会把用户(开发者)当傻逼,你可以做任何事情,它不会阻止你,但是要想玩的转,你最好知道自己在做什么
    可以这样做 不代表 应该这样做
    一起努力吧
    c0011
        3
    c0011  
       2019-11-30 20:38:42 +08:00
    这水平就开始看开源代码了?
    coray
        4
    coray  
       2019-11-30 21:47:13 +08:00
    学 C++不能浮躁...
    yulon
        5
    yulon  
       2019-12-01 00:03:26 +08:00   ❤️ 1
    因为赋值运算符的语义就是可以连续赋值的,当然你也可以像标准流的输入输出运算符一样,通过魔改位移运算符来实现,这完全取决于你自己的用途。

    但是运算符都没学过,就开始玩运算符重载的,也是虎。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5464 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 06:46 · PVG 14:46 · LAX 22:46 · JFK 01:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.