auto关键字
1. 什么是auto,auto有什么作用?
我们先来看一段代码:
#include<iostream>
#include<vector>
int main()
{
using namespace std;
vector<int>arr={2,4,6,8};
//遍历arr向量
for(vector<int>::iterator it=arr.begin();it!=arr.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
return 0;
}
在这案例中,我们可以看到,声明为迭代器的变量前缀非常长,这样来写代码非常不美观,也不方便。auto的出现很大程度是为了解决该问题。
现在我们来回答刚才的问题:
在C++中,auto
是一个关键字,它的作用是让编译器自动推导变量的类型,根据变量的初始化表达式来确定其类型。这个特性从C++11标准开始引入,被广泛用于简化代码和提高代码的可读性,使用auto关键字可以大大提高我们的编码效率。
下面是使用atuo关键字的代码:
#include<iostream>
#include<vector>
int main()
{
using namespace std;
vector<int>arr={2,4,6,8};
//遍历arr向量
//auto会自动将it转换成赋值变量的类型
for(auto it=arr.begin();it!=arr.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
return 0;
}
显然,代码变美观和简洁了不少。
2. auto和const
我们先来看一段代码:
int x=0;
const auto n = x;
auto f = n;
const auto & r1=x;
auto r2 = r1;
在第2行代码中,n为const int,auto被推导为int。
在第3行代码中,n为const int类型,但是auto却被推导为int类型,这说明当右边的表达式带有const属性时,auto不会使用const属性,而是直接推导出non-const类型。
第4行代码中,auto被推导为int类型,这个很容易理解,不再赘述。
第5行代码中, r1是const int&类型, auto也被推导为const int类型,这说明当const和引用结合时,auto的推导将保留表达式的const类型。
总结∶
1.当类型不为引用时,auto的推导结果将不保留表达式的const属性;
2.当类型为引用时,auto 的推导结果将保留表达式的const属性。
3. auto的高级用法
auto除了可以独立使用,还可以和某些具体类型混合使用,这样auto表示的就是“半个”类型,而不是完整的类型︰
int x = 0;
auto *pt1 =&x; //pt1为int*, auto推导为int
auto pt2 = &x; //pt2为int*, auto推导为int*
auto &r1 = x; //r1为int&, auto推导为int
auto r2 = r1; //r2为int, auto推导为int
4. auto的使用限制
在C++11中,
1.auto不能在函数的参数中使用
//错误案例
auto test1(int n)
{
return n*2;
}
2.auto不能作用于类的非静态成员变量
//错误案例
class test2{
public:
auto name;
auto age;
};
3.auto不能作用于模板参数
#include<iostream>
template<class T>
class Stack{
private:
std::vector<T> elements;
public:
void push(T value) {
elements.push_back(value);
}
T pop() {
T value = elements.back();
elements.pop_back();
return value;
}
}
int main()
{
//错误案例
Stack<auto>s;
s.push(1);
return 0;
}
4.auto不能用于推导数组类型文章来源:https://www.toymoban.com/news/detail-681947.html
#include<iostream>
int main()
{
int arr[]={2,3,4,6};
auto auto_arr=arr; //错误案例
return 0;
}
当然,上诉的限制是在C++11的情况下,其他版本可能有所变化。文章来源地址https://www.toymoban.com/news/detail-681947.html
到了这里,关于C++ 11 新特性 关键字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!