c++ auto类型用法总结

一、用途

auto是c++程序设计语言的关键字。用于两种情况

(1)声明变量时根据初始化表达式自动推断该变量的类型

(2)声明函数时函数返回值的占位符

二、简要理解

auto可以在声明变量时根据变量初始值的类型自动为此变量选择匹配的类型。

举例:对于值x=1;既可以声明: int x=1 或 long x=1,也可以直接声明 auto x=1


三、用法

根据初始化表达式自动推断被声明的变量的类型,如:

auto f = 3.14;  //double
auto s("hello");  //const char*
auto z = new auto(9);  //int *
auto x1 = 5, x2 = 5.0, x3 = 'r';   //错误,必须是初始化为同一类型

但是,这么简单的变量声明类型,不建议用auto关键字,而是应更清晰地直接写出其类型。


auto关键字更适用于类型冗长复杂、变量使用范围专一时,使程序更清晰易读。如:

 std::vector vect; 
 for(auto it = vect.begin(); it != vect.end(); ++it)
 {  //it的类型是std::vector::iterator
    std::cin >> *it;
  }


或者保存lambda表达式类型的变量声明:

  auto ptr = [](double x){return x*x;};//类型为std::function函数对象


四、优势

(1)拥有初始化表达式的复杂类型变量声明时简化代码。

比如:

#include   
#include   
void loopover(std::vector&vs)  
{  
    std::vector::iterator i=vs.begin();  
    for(;i

变为:

#include   
#include   
void loopover(std::vector&vs)  
{  
    for(  auto i=vs.begin();;i

使用std::vector::iterator来定义i是C++常用的良好的习惯,但是这样长的声明带来了代码可读性的困难,因此引入auto,使代码可读性增加。并且使用STL将会变得更加容易


(2)可以避免类型声明时的麻烦而且避免类型声明时的错误。

但是auto不能解决所有的精度问题。比如:

#include   
using namespace std;  
int main()  
{  
   unsigned int a=4294967295;//最大的unsigned int值  
   unsigned int b=1;  
   auto c=a+b;  
   cout<<"a="</错误,必须是初始化为同一类型


(8)auto不能自动推导成CV-qualifiers (constant & volatile qualifiers)

(9)auto会退化成指向数组的指针,除非被声明为引用
————————————————
版权声明:本文为CSDN博主「小拳头」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiaoquantouer/article/details/51647865

你可能感兴趣的:(c++)