zoukankan      html  css  js  c++  java
  • C++ 函数形参使用 const 引用的原因

    struct Point
    {
        int x, y;
        Point(int x = 0, int y = 0): x(x), y(y) {} // 构造函数
    };
    
    Point operator + (const Point &A, const Point &B)
    {
        return Point(A.x + B.x, A.y + B.y);
    }
    

    就拿上面的重载运算符函数为例,为什么参数要使用 const 引用呢?

    换个角度思考,如果我们不使用 const 形参,那么我们还可以写成什么样的形式?同时,我们还得保证对形参的操作不会影响到实参。那么,有以下的两种替代方案:

    Point operator + (const Point A, const Point B)
    {
        return Point(A.x + B.x, A.y + B.y);
    }
    

    或者

    Point operator + (Point A, Point B)
    {
        return Point(A.x + B.x, A.y + B.y);
    }
    

    如果不考虑可能会对原来的实参进行的误操作,那么,还可以写成下面的形式,这样对于最后这个函数的功能是没有影响的。

    Point operator + (Point &A, Point &B)
    {
        return Point(A.x + B.x, A.y + B.y);
    }
    

    那么,为什么推荐 const 引用的写法呢?我们比较一下即可。第一种替代方案需要拷贝很多东西,第二种也需要拷贝很多东西,这两种之中又以第一种更优一点,因为 const 保证了不会对形参进行改变。第三种的缺点,相比于 const 引用来讲,是不安全,因为它可能会对实参进行误操作从而导致实参的改变。

    综合效率和安全性,const 引用就是最优的写法了。

    按:关于上面的拷贝很多东西,其实是内存方面的知识,这方面我暂时没有接触到,先这么粗浅地理解,将就一下吧。

    参考:https://blog.csdn.net/qq_26849233/article/details/71425492

  • 相关阅读:
    Java web ch02_5
    Java web ch02_4
    Java web ch02_3
    Java web ch02_9
    myeclipse和eclipse的区别以及优越性
    新的学年,迎来新的活力!
    Javaweb中的Tomcat服务器(简单了解)
    一切都是对象
    java中被隐藏的具体实现
    SSL与TLS的区别以及介绍
  • 原文地址:https://www.cnblogs.com/fanlumaster/p/14231746.html
Copyright © 2011-2022 走看看