C++ 中的auto、auto&、auto&&、const auto&


#include <bits/stdc++.h>
using namespace std;

class A
{
public:
    /* 构造函数 */
    A()
    {
        for (int i = 0; i < 5; i++)
        {
            intVec.push_back(i);
        }
    }

    /* 用迭代器输出容器中的值 */
    void printVec() {
        for (vector<int>::iterator it = intVec.begin(); it != intVec.end(); it++){
            cout << (*it) << " ";
        }
        cout << endl;  
    }

    /* auto :拷贝一份容器中元素,而不会改变原容器的值
        auto的自动类型推断发生在编译期,所以使用auto并不会造成程序运行时效率的降低。*/
    void test1()
    {
        for (auto i : intVec)
        {
            i += 1;
        }        
    }

    /* auto & :修改了原容器中元素的值 */
    void test2()
    {
        for (auto& i : intVec)
        {
            i += 1;
        }

    }

    /* auto && :也可以修改元素的值(一般用这种方法) */
    void test3()
    {
        for (auto&& i : intVec)
        {
            i += 1;
        }
    }

    /* const auto & :只读 */
    void test4()
    {
        for (const auto& i : intVec)
        {
            /* 报错:表达式必须是可修改的左值 */
            // i += 1; 
        }

    }

private:
    vector<int> intVec;  
};

int main()
{
    A a;

    a.printVec();   //0 1 2 3 4
    a.test1();      //auto
    a.printVec();   //0 1 2 3 4

    a.printVec();   //0 1 2 3 4
    a.test2();      //auto&
    a.printVec();   //1 2 3 4 5

    a.printVec();   //1 2 3 4 5
    a.test3();      //auto&&
    a.printVec();   //2 3 4 5 6

}

文章作者: 再也不会
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 再也不会 !
  目录