C++ 中auto与auto&的区别 (详细)
使用auto标明一个变量,这个变量永远不会是引用变量。
使用auto&标明一个变量,这个变量有可能被编译器推导为引用变量。
#include <iostream>
#include<vector>
#include <time.h>
using namespace std;
class A
{
public:
A()
{
year = 0;
for (int i = 0;i < 5;i++)
{
intVec.push_back(i);
}
}
void show()
{
for (auto i : intVec)
{
cout <<" "<< i << " ";
}
cout << endl;
}
vector<int>& getIntVec()
{
return intVec;
}
int& getYear()
{
return year;
}
void showYear()
{
cout << "year: "<< year << endl;
}
private:
vector<int> intVec;
int year;
};
class Test
{
public:
//是否改变原来的值?
void test1()
{
A objA;
auto intVec = objA.getIntVec();
intVec[0] = 111;
objA.show();
auto& intVec2 = objA.getIntVec();
intVec2[1] = 222;
objA.show();
auto year = objA.getYear();
year = 666;
objA.showYear();
}
//效率上的区别
void test2()
{
vector<int> data(11111111);
time_t t1, t2, t3;
t1 = time(NULL);
for (int i = 0;i < 100;i++)
{
auto testData = data;
}
t2 = time(NULL);
for (int i = 0;i < 100;i++)
{
auto& testData = data;
}
t3 = time(NULL);
cout << "auto消耗:" << difftime(t2, t1) << endl;
cout << "auto&消耗:" << difftime(t3, t2) << endl;
}
};
int main()
{
Test test;
//这里打开注释可以选择运行哪一个测试案例
//test.test1();
//test.test2();
}
