zoukankan      html  css  js  c++  java
  • 有关重载运算符的一些思考

    重载“+”运算符后,执行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.如果第四点是对的,那么<<运算符的操作顺序就是从左至右了。(好像确实非成员函数重载运算符不保证运算顺序)

  • 相关阅读:
    dubbo zookeeper报错failed to connect to server , error message is:No route to host
    linux的ssh命令
    linux的/etc/hosts的作用
    linux如何查看某个pid的进程?
    Nginx配置详解
    nginx基本配置与参数说明以及Nginx中的upstream轮询机制介绍
    Nginx配置upstream实现负载均衡
    nginx简单的nginx.conf配置
    API Gateway性能比较:NGINX vs. ZUUL vs.Cloud Gateway vs. Linkerd[译]
    RabbitMQ 入门【精+转】
  • 原文地址:https://www.cnblogs.com/BoysCryToo/p/13405399.html
Copyright © 2011-2022 走看看