C++ 之引用

Posted 技术笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 之引用相关的知识,希望对你有一定的参考价值。

  1. int argc ,char * argv[] - argument count & argument vector

    argc - 命令行参数个数,argv[]依次指向每一个命令行参数,其中argv[0]为程序名字:下面的程序包含了完整的程序路径。

    #include <iostream>
    
    int main(int argc, char *argv[])
    {     int i = 0;                 // begin with 0
          while (i < argc)
              std::cout << argv[i++] // output string
                   << " "            // output SPACE
                   << std::endl;     // terminate output line 
          return 0;
    }

     

  2. 引用

    1)作为返回值,不需要产生临时对象,然后拷贝这个对象,(见下面代码的注释),目前不要深究引用机制,目前记住的返回引用的场景:输入流、 //发现其他的再补充

    #include    <iostream>
    using namespace std;
    
    
    int & rfun(int &);                                                     //don‘t dig more,ref func saves time.
    int fun(int);
    
    void  main(void) {
        int  a = 7, b = 9; 
        int &ra = a, &rb = b;                                          //Treat ra as another name of a
        int *pa = &ra, *pb = &rb;
    
        cout << pa << "  " << (void *)pa << endl;
        cout << pb << "  " << (void *)pb << endl;
    
        cout << a << "  " << b << endl;
        cout << rb << "  " << (void *)&rb << endl;                      //&rb == pb always.
        rb = rfun(ra);                                 //b=ra;  rb=ra;  -->  int &rd=a;
                                                    //rb=fun(ra);
        cout << rb << "  " << (void *)&rb << endl;
    
        cout << a << "  " << b << endl;
        rb = 8;
        cout << a << "  " << b << endl;
    }
    
    int & rfun(int & r) {
        return  r;        //  b=fun(a)  -->  b=a;
    };
    
    int fun(int r) {
        return    r;        //  b=fun(a)  -->  r=a;  b=r;
    };
    2)引用类型参数

    对于class,vector等类型的参数,引用 避免了值拷贝,提升效率,使用引用,函数可以改变实参的值,如果在调用过程中实参值不会发生变化,那么添加 const 修饰。

         

//call by ref can change the value after func called.
#include    <iostream>

using    namespace    std;

void  funr(const int &, int);
int&  rfun(const int &, int);

void  main(void) {
    int a = 100;
    int& b = a;
    const  int& c = 20;

    const int & ca = a;

    a = 200;

    const int cb = 300;

    cout << &a << "  " << a << endl;
    cout << &b << "  " << b << endl;
    cout << &c << "  " << c << endl;

    cout << endl << endl;

    funr(a, a);                           //first a,like above;second a, int tmp = a;
    funr(2, 2);
    cout << endl << endl;

    int& rf = rfun(c, c);
    cout << &rf << "  " << rf << endl;

}

void  funr(const int &  ra, int  pa) {    
    cout << &ra << "  " << ra << endl;
    cout << &pa << "  " << pa << endl;    //int tmp = pa, &pa is addr of tmp
}

int&  rfun(const int &  ra, int  pa) {    // b = rfun(ra,pa)-->b = ra

    int  x = 200, &d = x;
    cout << &ra << "  " << ra << endl;
    cout << &pa << "  " << pa << endl;
    return  (int&)ra;
}

 以上则是目前想到的关于引用的知识点小结,以前曾经写过这话题的博文,今天讲解细致些,看注释,运行程序,更快速理解引用,VS2015社区版。

以上是关于C++ 之引用的主要内容,如果未能解决你的问题,请参考以下文章

这些 C++ 代码片段有啥作用?

有趣的 C++ 代码片段,有啥解释吗? [复制]

以下代码片段 C++ 的说明

C++ 代码片段执行

C++基础学习笔记C++语法之引用

C++基础学习笔记C++语法之引用