• 有关重载运算符的一些思考


    重载“+”运算符后,执行a + b + c报错的原因分析:

     

    1.所谓函数不能返回临时变量的引用,是指局部变量bai在栈空间中分配内存,函数返回du时栈指针回退,当主调函数继续调zhi用其它被调函数时,栈指针上移,上一次函数调用所分配的空间会被本次调用覆盖,如果此时再引用原来的局部变量就会出现不可预见的结果
    https://zhidao.baidu.com/question/154445484.html
    2.不论是成员还是非成员重载运算符,如果返回值类型是对象(不是引用),并且参数列表中的类型是引用,那么可能无法进行连续运算时比如a+b+c,b+c的返回值是个临时对象,不能为其绑定引用。如果返回引用,那么对于+运算会返回一个临时对象的引用,也可能会出问题(根据第一点)
    3.所以如果重载类似+、-这样产生一个新对象的同时不改变原有参数的运算,可能无法进行连续运算比如a+b+c!

    4.一点补充,无论是成员函数重载还是非成员函数重载都可能遇到这个问题,不过顺序不同。成员函数重载“+”返回类型是对象时,可以执行(a+b)+c(因为临时对象作为运算符函数的访问者而不是参数)不能执行a+(b+c)。非成员函数重载“+”返回类型是对象时,两种顺序均无法执行。

    5.重载输出运算符“<<”时,返回类型为ostream的引用,这样可以连续输出(运算),比如cout<<a<<b<<c<<endl;。cout<<a运算后返回cout的引用再进行cout<<b等后续输出。

    6.如果第四点是对的,那么<<运算符的操作顺序就是从左至右了。(好像确实非成员函数重载运算符不保证运算顺序)

  • 相关阅读:
    类目(分类)
    协议(Protocol)---实例
    OC 复合 组装电脑
    iOS--九宫格奥秘(UIView)(arc4random)
    字符串
    oc 字符串
    七星彩问题
    OC--第一个程序
    关于行内元素垂直居中的一个小小trick
    关于orgChart
  • 原文地址:https://www.cnblogs.com/BoysCryToo/p/13405399.html
Copyright © 2020-2023  润新知