C++面向对象高级编程

C++特性之引用 (Boolan)

2017-02-05  本文已影响129人  Haley_2013

C++特性之引用 (Boolan)

本章内容:
1 引用的不同用例
1.1 引用变量
1.2 引用数据成员
1.3 引用参数
1.4 引用作为返回值
1.5 使用引用还是指针
1.6 右值引用


1 引用

1.1 引用变量

    int ival = 3;
    int &iRef = x;
    int &emptyRef;      //编译出错!
    int &unnamedRef1 = 5;           //编译出错
    const int &unnamedRef2 = 5;   //正常运行
(1) 修改引用
    int x = 3,y = 4;
    int &iRef = x;
    iRef = y;       //Changes value of x to 4. Doesn't make iRef refer to y.
    int x = 3,y = 4;
    int &iRef = x;
    iRef = &y;      //编译出错
(2) 指针的引用和指向引用的指针
    int *pVal;
    int *&ptrRef = pVal;
    ptrRef = new int;
    *ptrRef = 5;

1.2 引用数据成员

    class MyClass
    {
    public:
        MyClass(int &iRef) : m_ref(iRef) {}
    private:
        int &m_ref;
    };

1.3 引用参数

    void swap(int &first, int &second)
    {
        int temp = first;
        first = second;
        second = temp;
    }
    int x = 5, y = 6;
    swap(x, y);
    swap(3, 4);     //编译出错
(1) 指针转换为引用
    int x = 5, y = 6;
    int *px = &x;
    int *py = &y;
    swap(*px, *py);
(2) 按引用传递与按值传递

1.4 引用作为返回值

1.5 使用引用还是指针

    void swap(int *first, int *second)
    {
        int temp = *first;
        *first = *second;
        *second = temp;
    }

1.6 右值引用

    // Increment value using lvalue reference parameter.
    void incr(int &value)
    {
        cout << "increment with lvalue reference" << endl;
        ++value;
    }
    // Increment value using rvalue reference parameter.
    void incr(int &&value)
    {
        cout << "increment with rvalue reference" << endl;
        ++value;
    }
    int a = 10, b = 20;
    incr(a);        //调用incr(int &value);
    incr(a + b);    //将调用incr(int &&value);
    incr(3);        //将调用incr(int &&value);
    incr(std::move(b)); //将调用incr(int &&value);
    int &i = 2;     //invalid:reference to a constant
    int a = 2, b = 3;
    int &j = a + b; //invalid:reference to a temporary
    int &&i = 2;
    int a = 2, b = 3;
    int &&j = a + b;
上一篇 下一篇

猜你喜欢

热点阅读