C++ 11 新特性之 auto

来源:互联网 发布:淘宝退换货怎么操作 编辑:程序博客网 时间:2024/05/19 22:55

auto是C++ 11 的另一个新特性,其实大家可能之前就见过这个关键字,Java也有这个保留字,当然最早使用这个关键字的是asni c,但是在C语言,或者更早的C++ 98中auto很少被使用,且作用不大,在C中的变量,不是global的就是auto类型的。是一种默认的修饰符。所以在C++ 11 中就又重新定义了auto关键字,供大家来使用。

注意了 auto已经不是N年前的那个auto了,他穿越到现代了,哈哈。

 总的来说auto关键字主要有两个用处,第一个就是自动类型推断,第二个是返回值占位符。废话不多说,先来看一段代码:

///////////////////////////////////auto的自动类型推断实例///////////////////////////////////    //使用auto初始化变量    auto a = 10;    printf("a = %d",a);    auto b("auto");    printf("b = %s",b);    //使用auto消除冗长    map<string,vector<int> > _map;    map<string, vector<int> >::const_iterator itr1 = _map.begin();    auto itr2 = _map.begin();    //使用auto声明lambda表达式    auto func = [](){printf("auto!!!");};    //执行func    func();    /////////////////////////////////auto的返回值占位符的实例//////////////////////////////////    //应用于模板    template <class T, class U>    auto add(T t, U u)    {        auto v = t + u;
return v;    }

代码中列举了一些auto的应用场景,可以用来初始化变量,可以用来消除冗长,可以应用于模板,在没有auto之前对于v的类型推断是非常麻烦的事情,而且容易出错,有了auto就相对容易了很多,模板函数的返回值也是用auto进行了站位。

好了,上面就是auto的基本使用方法,今天的课程。。。。。。。。当然还没完。上面讲了auto很多好用的地方,能帮我们简化我们的工作。大家是不是感觉自从有了auto,腰也不酸 了,腿也不疼了,一口气撸几十次也不眼冒金星了。哈哈,新特性的好处是显而易见的,但是随之而来的副作用也是多多的,例如在你使用auto的时候需要注意的问题。

哈哈,有得必有失,让我们耐心的看一下使用auto需要注意的事项,还是以代码来讲解,代码如下:

1,auto修饰的变量必须初始化

auto var; //错误,因为没有初始化

2,auto不能和其他类型修饰符联合使用(C++98或者C语音是允许这么做的)

auto int var = 0; //错误

3,auto不能修饰模板和参数

template< auto t> func(auto a){};//错误,auto不能修饰模板和参数

4,在堆上开辟的空间必须初始化

int *a = new auto();//错误,未初始化    int *b = new auto(3);//正确    auto *c = new auto(4);//正确    auto *d = new auto();//错误,未初始化

5,auto是一个占位符,并不是一种类型,所以不能用在对变量的强转

    int a = 44;    auto b = (auto)a;//错误    auto c = static_cast<auto>(a);//错误

6,定义一系列auto对象时,应该保持对象的类型相同

    auto a = 0,b = 1,c = 2;//正确    auto d = 3,e = 4,f = 5.0;//错误

7,auto可以用 * ,& ,&&,const修饰

    auto a = 12;    auto *p1 = &a;    auto &p2 = a;    const auto b = a;

还有几条,基本上使用不到(我会告诉你,其实是我没记住吗?,哈哈。开玩笑了)。

auto就讲到这儿,下篇博客准备讲解一下C++ 11 的统一初始化方法,上班时间写的博客,擦,伤不起啊。

0 0
原创粉丝点击