编程的时候常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型。然而做到这一点很难,有时候根本做不到。为了解决这个问题。C++11新标准引入了auto类型说明符,用它就 能让编译器帮我们去分析表达式所属的类型。auto通过编译器的类型来推算变量的类型。因此,auto定义的变量必须有初始值。

  使用auto的作用是很大的,它能让我们的代码更加流畅简易。

  尽管auto的定义看起来简单明了,但是有时编译器推断出来的auto类型有时候和初始值类型并不一样,所以编译器会适当的改变结果类型使其更符合初始规则。所以有几个细节需要我们注意:
 
1 使用引用类型给auto类型的初始值的时候,真正参与初始化的是引用对象的值。
     如int i = 0, &r = i;
     auto a = r;     //a是一个整数(r是i的别名,而i是一个整数)
 
2 auto一般会忽略顶层的const(顶层const表示指针本身是个常量,而顶层cosnt表示指针所指的对象是常量。也就是说顶层cosnt的这个概念作用于变量本身,所以const int i 也是一个顶层const;当执行对象拷贝的时候,不能让一个非指向常量的指针拷贝一个指向常量的指针,为了数据的安全,所以会检查底层const)
     比如 :
     const  int ci = i, &cr = ci;
     auto b = ci;    //b是一个整数(ci的顶层const特性被忽略掉了)
     auto c = cr;     //c也是一个整数(cr是ci 的别名,次本身是一个顶层const)
     auto d = &i;   //d是一个整型指针。
     auto e = &ci;  //e是一个指向整数常量的指针。(对常量对象取地址是一种低层的)
     
     如果我们希望推断出auto类型是一个顶层的const,则需要明确的指出,
     const auto f = ci;

C++11 auto类型说明符的使用的更多相关文章

  1. auto类型说明符的注意事项

    1.auto类型说明符,是C++11标准下的,它能让编译器自行判断表达式的类型. 2.auto也能在一条语句上声明多个变量,但是,该语句上的多个变量的类型,必须一致. 3.编译器推断出来auto类型可 ...

  2. C++ auto类型说明符

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50864612 编程时常常需要把表达式的 ...

  3. (2)左右值初探与auto类型说明符

    这篇文章的起因是下面这两段代码,出自<C++ primer 5th>中文版P62页: auto &h =42;//错误,不能为非常量引用绑定字面值 const auto & ...

  4. auto类型说明符

    auto让编译器通过出初始值来推算变量的类型,显然,auto定义的变量必须有初始值: //由val1和val2相加的结果可以推断出item的类型 auto item = val1 + val2;//i ...

  5. C++11 AUTO 类型实践

    auto在C++11中引入,为大家带来方便. 具体使用及注意事项参考: https://blog.csdn.net/xiaoquantouer/article/details/51647865 htt ...

  6. C++通过迭代修改字符串本身(auto类型说明符)

    以字符串这种支持 for (declaration : expression) statement 这样for语句迭代的数据结构为例,我们看看auto关键字在类型推断中的作用. string s = ...

  7. c++11 auto 与 decltype 详解

    转自: here 一. auto简介 编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题 ...

  8. C++ decltype类型说明符(尾置返回类型使用)

    转自https://blog.csdn.net/yhl_leo/article/details/50865552 1 基本语法 decltype 类型说明符生成指定表达式的类型.在此过程中,编译器分析 ...

  9. C++ decltype类型说明符

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50865552 1 基本语法 declt ...

随机推荐

  1. spring MVC 学习(四)---拦截器,视图解析器

    1.接口HandlerInterceptor 该接口包含3个方法,分别是preHandle,postHandle,afterCompletion,分别代表着执行前,执行后,执行完成要执行的方法,其中p ...

  2. 如何制作一款HTML5 RPG游戏引擎——第三篇,利用幕布切换场景

    开言: 在RPG游戏中,如果有地图切换的地方,通常就会使用幕布效果.所谓的幕布其实就是将两个矩形合拢,直到把屏幕遮住,然后再展开直到两个矩形全部移出屏幕. 为了大家做游戏方便,于是我给这个引擎加了这么 ...

  3. Selenium-IDE,Selenium-RC ,Selenium grid以及 Selenium-Core

    Selenium-IDE,Selenium-RC ,Selenium grid 以及 Selenium-Core Selenium 是一种 Web 应用的自动测试工具,通过模拟用户对 Web 页面的各 ...

  4. 使用Echarts进行可视化的数据线呈现

    由于游戏后台需要统计游戏玩家的支付情况,恰好那天看见同学群里聊天说到了Echarts,于是我就看了眼,一看,哟,还是百度的产品,看了文档,示例,确实很屌的样子啊,于是自己就开始试了,最终效果如下: 个 ...

  5. JsonObject没有fromObject、idea引入maven有红线没依赖、JsonObject maven 依赖包

    目录: 1.JsonObject maven 依赖包 2.idea引入maven有红线,没依赖 3.JsonObject没有fromObject \\\\\\\\\\\\\\\\\\\\\\\ 1.J ...

  6. ruby中的链式访问和方法嵌套

    先看一道题,这道题是codewars上的一道题,我很早就看到了,但是不会写.等到又看到这道题的时候,我刚看完元编程那本书,觉得是可以搞定它的时候了.废话不多说,先看这道题,题目最开始是为JavaScr ...

  7. selenium+python学习总结

    学习了一个月的selenium+python,终于学有所成,下面以一个简单的项目来总结学习所得. 1.         项目结构 在项目结构中,大家要注意到:每一个源文件夹中都要有一个__init__ ...

  8. C#打印类

    using System;using System.Collections.Generic;using System.Text;using System.Windows.Forms;using Sys ...

  9. 分布式系统 SOA与中间件

    在分布式系统中,有一个基础的理论 CAP,Consistency一致性 Availability可用性 Partition Tolerance分区容忍性,任何一个系统都不可能同时满足这三个条件(高富帅 ...

  10. ora-12154:tns:could not resolve the connect identifier specied

    今天在发布网站时,点击登录之后出现了这个问题,修改一下环境变量,该问题就顺利解决了,解决方法如下: 在环境变量里,找到[Administrator的用户变量(U)],在其之下新建一个用户变量: 变量名 ...