C++11关于auto关键字的使用示例

一.概述

auto关键字在c++98中已经出现,在98中定义为具有自动存储器的局部变量,

c++11中标准委员会重新定义了auto关键字,表示一个类型占位符,告诉编译器,auto声明变量的类型必须由编译器在编译时期推导
而得。

注意事项:

1.auto关键字类型推断发生在编译期,程序运行时不会造成效率降低

2.auto关键字定义时就需要初始化

3.auto仅仅是一个占位符,它并不是一个真正的类型, 因此sizeof(auto)是错误的

4.auto不能作为函数的参数

5.auto不能定义数组,如auto a[3] = {1,2,3}; 错误

二.使用

1.自动推导变量类型

 auto a = 1;
 auto b = 2LL;
 auto c = 1.0f;
 auto d = "woniu201";
 printf("%s\n", typeid(a).name());
 printf("%s\n", typeid(b).name());
 printf("%s\n", typeid(c).name());
 printf("%s\n", typeid(d).name());

2.简化代码

 //在对一个vector容器遍历的时候,传统的方法如下:
 vector<int> v;
 for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
 {
 printf("%d ", *it);
 }
 //使用auto关键字,简化后的方法如下:
 for (auto it = v.begin(); it != v.end(); it++)
 {
 printf("\n%d ", *it);
 }
 //auto关键字的存在使得使用STL更加容易,代码更加清晰。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • C++11新特性之auto的使用

    前言 C++是一种强类型语言,声明变量时必须明确指出其类型.但是,在实践中,优势我们很难推断出某个表达式的值的类型,尤其是随着模板类型的出现,要想弄明白某些复杂表达式的返回类型就变得更加困难.为了解决这个问题,C++11中引入的auto主要有两种用途:自动类型推断和返回值占位.auto在C++98中的标识临时变量的语义,由于使用极少且多余,在C++11中已被删除.前后两个标准的auto,完全是两个概念. 一.自动类型推断 auto自动类型推断,用于从初始化表达式中推断出变量的数据类型.通过aut

  • 详解C++的模板中typename关键字的用法

    typename的使用场合 用处1, 用在模板定义里, 标明其后的模板参数是类型参数. 例如 template<typename T, typename Y> T foo(const T& t, const Y& y){//....}; templace<typename T> class CTest { private: T t; public: //... } 其实,这里最常用的是使用关键字class,而且二者功能完全相同,这里的class和定义类时的class

  • C++中的auto_ptr智能指针的作用及使用方法详解

    智能指针(auto_ptr) 这个名字听起来很酷是不是?其实auto_ptr 只是C++标准库提供的一个类模板,它与传统的new/delete控制内存相比有一定优势,但也有其局限.本文总结的8个问题足以涵盖auto_ptr的大部分内容.  auto_ptr是什么? auto_ptr 是C++标准库提供的类模板,auto_ptr对象通过初始化指向由new创建的动态内存,它是这块内存的拥有者,一块内存不能同时被分给两个拥有者.当auto_ptr对象生命周期结束时,其析构函数会将auto_ptr对象拥

  • C++ operator关键字(重载操作符)的用法详解

    operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名. 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,"功能"都是由函数实现的). 一.为什么使用操作符重载? 对于系统的所有操作符,一般情况下,只支持基本数据类型和标准库中提供的class,对于用户自己定义的class,如果想支持基本操作,比如比较大小,判断是否相等,

  • C++ auto类型说明符

    编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚知道表达式的类型.然而要做到这一点并非那么容易,有时候甚至根本做不到.为了解决这个问题,C++11标准引入了auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型. 与原来那些只对应一种特定类型的说明符不同,auto让编译器通过初值来推算变量类型.显然,auto定义的变量必须要有初始值. 使用auto具有以下几点好处: 可靠性:如果表达式的类型发生更改(包括函数返回值发生更改的情况),它也能工作. 性能:确保将不会进行转换

  • C++11新特性中auto 和 decltype 区别和联系

    C++11新特性中auto 和 decltype 区别和联系 一. auto简介 编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题,C++11新标准就引入了auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型.和原来那些只对应某种特定的类型说明符(例如 int)不同.auto 让编译器通过初始值来进行类型推演.从而获得定义变量的类型,所以说 auto 定义的变量必须有初始

  • C++ override关键字使用详解

    C++ override从字面意思上,是覆盖的意思,实际上在C++中它是覆盖了一个方法并且对其重写,从而达到不同的作用.在我们C++编程过程中,最熟悉的就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法.还有一个典型应用就是在继承中也可能会在子类覆盖父类的方法. 公有继承包含两部分:一是"接口"(interface),二是 "实现" (implementation). 例如Person类的几种成员函数的继承方式: c

  • c++使用正则表达式提取关键字的方法

    下面看下c++通过正则表达式提取关键字,代码如下所示: string text = "岳云鹏的对象叫铁锤"; regex pattern("(.*)的对象叫(.*)"); smatch results; if (regex_match(text, results, pattern)) { for (auto it = results.begin(); it != results.end(); ++it) cout << *it << endl

  • C++中的explicit关键字实例浅析

    在C++程序中很少有人去使用explicit关键字,不可否认,在平时的实践中确实很少能用的上.再说C++的功能强大,往往一个问题可以利用好几种C++特性去解决.但稍微留心一下就会发现现有的MFC库或者C++标准库中的相关类声明中explicit出现的频率是很高的.了解explicit关键字的功能及其使用对于我们阅读使用库是很有帮助的,而且在编写自己的代码时也可以尝试使用.既然C++语言提供这种特性,我想在有些时候这种特性将会非常有用. 按默认规定,只用传一个参数的构造函数也定义了一个隐式转换.举

  • C++中auto_ptr智能指针的用法详解

    智能指针(auto_ptr) 这个名字听起来很酷是不是?其实auto_ptr 只是C++标准库提供的一个类模板,它与传统的new/delete控制内存相比有一定优势,但也有其局限.本文总结的8个问题足以涵盖auto_ptr的大部分内容. auto_ptr是什么? auto_ptr 是C++标准库提供的类模板,auto_ptr对象通过初始化指向由new创建的动态内存,它是这块内存的拥有者,一块内存不能同时被分给两个拥有者.当auto_ptr对象生命周期结束时,其析构函数会将auto_ptr对象拥有

随机推荐