C++ 中的auto、auto&、auto&&、const auto&
/*
* @Description:
* @Author: CM
* @Date: 2021-04-23 14:23:56
* @LastEditTime: 2021-04-23 14:40:13
* @LastEditors: CM
*/
#include <iostream>
#include <vector>
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 & :修改了原容器中元素的值 */
/* &代表引用,for (int& i : intVec) */
void test2()
{
for (auto& i : intVec)
{
i += 1;
}
}
/* auto && :也可以修改元素的值(一般用这种方法) */
void test3()
{
for (auto&& i : intVec)
{
i += 1;
}
}
/* const auto & :只读 */
/* for (const int & i : intVec) :只读 */
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
}
参考链接
. . . . .
