美文网首页
const int &a 、int &a、int a的区别

const int &a 、int &a、int a的区别

作者: 无用书生繁华梦 | 来源:发表于2020-02-29 15:46 被阅读0次

    int a

    void fun(int a)
    {   
       a++;
       std::cout << "传入:" << a << std::endl;
    }
    int main()
    {
       int a = 10;
       std::cout << "初始值:" << a << std::endl;
       fun(a);
       std::cout << "计算后:" << a  << std::endl;
    }
    初始值:10
    传入:11
    计算后:10
    

    这样的函数调用时是不会改变参数的值的,在函数中也就是以一个局部变量的形式存在,当函数结束时,变量a的生命周期也就结束了。

    int &a

    void fun(int &a)
    {   
        a++;
        std::cout << "传入:" << a << std::endl;
    }
    int main()
    {
        int a = 10;
        std::cout << "初始值:" << a << std::endl;
        fun(a);
        std::cout << "计算后:" << a  << std::endl;
    }
    初始值:10
    传入:11
    计算后:11
    

    可以发现传入引用时候,会修改原实参的值。

    const int &a

    参数是较大的数据结构类型时,而且我们不需要改变原变量中的值。就需要在最前面加一个const修饰符。这时候有小伙伴会问,这样为啥还不如直接用int a形式。理论上用int a是完全可行的。但是由于考虑效率问题,对原变量进行一次复制操作,即使两个变量名是相同的由于作用域不同,所以其实是两个变量,所以需要一次复制操作,因此当数据大小较大时是非常浪费时间的。所以直接传入引用。

    void fun(const int &a)
    {   
        //a++;  //如果放开,此行会报错。因为a不能赋值,不能被概念
        std::cout << "传入:" << a << std::endl;
    }
    int main()
    {
        int a = 10;
        std::cout << "初始值:" << a << std::endl;
        fun(a);
        std::cout << "计算后:" << a  << std::endl;
    }
    初始值:10
    传入:10
    计算后:10
    

    相关文章

      网友评论

          本文标题:const int &a 、int &a、int a的区别

          本文链接:https://www.haomeiwen.com/subject/ebgphhtx.html