赞
踩
在C++11中,auto关键字能够自动推导出变量的实际类型,可以帮助我们写出更加简洁、现代的代码。
语法如下:
// var--变量名;value--变量值
auto var=value;
示例程序:
#include <iostream>
using namespace std;
int main()
{
// 无const修饰
auto var = 3.14;
auto var1 = 100;
auto var2 = 'z';
auto var3; //错误❌,使用auto关键字必须初始化
return 0;
}
鼠标放在变量上会自动显示编译器推导出的数据类型。
指针和引用的auto推导示例代码:
#include <iostream> using namespace std; int main() { // 带指针和引用的auto使用 int var = 100; //&var:int* ; auto:int auto* var1 = &var; //var:int ; auto:int auto& var2 = var; //&var:int* ; auto:int* auto var3 = &var; //var:int ; auto:int auto var4 = var; // auto在const情况下的使用 //var:int ; auto:int ; var5:const int const auto var5 = var; //var5:const int ; auto:int ; var6:int auto var6 = var5; //var:int ; auto:int ; var7:const int const auto& var7 = var; //var7:const int ; auto:const int ; var8:const int auto& var8 = var7; //var7:const int ; auto:const int ; var9:const int* auto* var9 = &var7; return 0; }
备注:
指针常量和常量指针的区别:
指针常量(int* const):指针的指向不可以改变,指针指向的值可以改变。
常量指针(const int*):指针的指向可以改变,指针指向的值不可以改变。
可以通过这一句话记忆,指针常量,即指针是常量;常量指针,即常量的指针。
void fun(auto a) //错误❌
{
cout<<a<<endl;
}
class Test {
auto var = 0; //错误
static auto var1 = 100; //错误,类的静态非常量成员的初始化不允许在类的内部
static const auto var2 = 200; //类的静态常量成员初始化可以在类的内部完成
};
int main()
{
int array[] = { 1,2,3,4 }; //定义数组
auto var = array; //auto:int *
auto var1[] = array; //错误❌,auto不能用来定义数组
auto var2[] = { 1,2,3,4 }; //错误❌,auto不能用来定义数组
return 0;
}
template<class T>
class Test {
T t;
};
int main()
{
Test<double> t;
Test<auto> t1 = t; //错误❌,auto无法推导出类模板类型
return 0;
}
#include <iostream> #include <vector> using namespace std; int main() { vector<int> vec; vec.push_back(1); vec.push_back(2); vec.push_back(3); vec.push_back(4); //STL容器遍历 //vector<int>::iterator it=vec.begin(); auto it = vec.begin(); //auto自动推导迭代器类型,代码简洁 for (; it < vec.end(); it++) { cout << *it << endl; } return 0; }
#include <iostream> #include <vector> using namespace std; class Test { public: static int get() { return 10; } }; class Test1 { public: static string get() { return "hello world"; } }; template <class T> void func() { auto ret=T::get(); cout << ret << endl; } int main() { func<Test>(); func<Test1>(); return 0; }
本文主要介绍了auto的使用、带指针和引用的auto的使用以及注意事项、推荐使用的场景,欢迎有问题交流。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。