1、auto关键字

C++新标准引入auto关键词,此auto与之前C语言的auto意义已经不一样了。

这里的auto是修饰未知变量的类型,编译器会通过此变量的初始化自动推导变量的类型。

例如:auto i = 0 ;编译器会通过“0”值,推导出变量i是整型。

如果初始值是引用,如:

[cpp] view
plain
 copy

 
  1. int i = 4;
  2. int &ri = i;
  3. auto ai = ri;

通过应用是利用了ri指向的对象,所以ai的类型是int。也就是ai与i的类型是相同的。

另外,auto是忽略top-level const,而保留low-level const属性。具体说明如下:

[cpp] view
plain
 copy

 
  1. const int ci = i, &cr = ci;
  2. auto b = ci;    // b is an int (top-level const in ci is dropped)
  3. auto c = cr;    // c is an int (cr is an alias for ci whose const is top-level)
  4. auto d = &i;    // d is an int * (& of an int object is int *)
  5. auto e = &ci;   // e is const int * (& of a const object is low-level const)

上面的变量b、c、d、e说明了auto的一个特别属性,该特性与下面将要介绍的另一个关键字decltype不同。

为了实现top-level const,需要在auto前面加const,也就是const auto f = ci,那么f就是const int 类型。

2、decltype

关键字decltype能够推导表达式或者函数的返回类型,但不对表达式求值。

例如:

[cpp] view
plain
 copy

 
  1. decltype(f()) sum = x;

变量sum拥有f()的返回值类型。与auto不同,decltype能够返回变量的top-level属性,如果变量是引用,那么decltype修饰的变量也是引用。例如:

[cpp] view
plain
 copy

 
  1. const int ci = 0, &cj = ci;
  2. decltype(ci) x = 0;    // x has type const int
  3. decltype(cj) y = x;    // y has type const int & and is bound to x
  4. decltype(cj) z;        // error: z is a reference and must be initialized.

当表达式不是变量,而是可作为左值的对象时,那么decltype返回的时指向该对象类型的应用。

[cpp] view
plain
 copy

 
  1. int *p = &i;
  2. decltype(*p) pri = i;
  3. decltype(p) pi = &i;

其中pri是int &类型,而pi是int *类型。

decltype的推导结果还与给定的表达式的形式有关。如果对变量求类型,那么decltype直接返回变量的类型;如果变量加括号后,那么decltype返回的类型是引用,引用的类型就是该变量的类型。

[cpp] view
plain
 copy

 
  1. decltype(i) e;     // e is an int variable uninitialized
  1. decltype((i)) d;  // error: d is int & and must be initialized
原:http://blog.csdn.net/hjx5200

C++11 auto and decltype的更多相关文章

  1. c++11 auto 与 decltype 详解

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

  2. C++11 auto和decltype推导规则

    VS2015下测试: decltype: class Foo {}; int &func_int_r(void) { int i = 0; return i; }; int && ...

  3. C++ 11 学习1:类型自动推导 auto和decltype

    Cocos 3.x 用了大量的C++ 11 的东西,所以作为一个C++忠实粉丝,有必要对C++ 11进行一个系统的学习. 使用C++11之前,一定要注意自己使用的编译器对C++11的支持情况,有些编译 ...

  4. c++11——auto,decltype类型推导

    c++11中引入了auto和decltype关键字实现类型推导,通过这两个关键字不仅能够方便的获取复杂的类型,而且还能简化书写,提高编码效率.     auto和decltype的类型推导都是编译器在 ...

  5. 【C++】C++11的auto和decltype关键字

    转自: http://www.linuxidc.com/Linux/2015-02/113568.htm 今天要介绍C++11中两个重要的关键字,即auto和decltype.实际上在C++98中,已 ...

  6. C++11新特性— auto 和 decltype 区别和联系

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

  7. C++ 11 新特性: auto 和 decltype 区别和联系

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

  8. 关于auto和decltype

    auto会忽略顶层const,保留底层const ; const int* const p = &i; auto p2 = p; //p2是const int*,不是const int* co ...

  9. C++11新特性--decltype (转)

    返回值 decltype(表达式) [返回值的类型是表达式参数的类型] 这个可也用来决定表达式的类型,就像Bjarne暗示的一样,如果我们需要去初始化某种类型的变量,auto是最简单的选择,但是如果我 ...

随机推荐

  1. jQuery入门(1)jQuery中万能的选择器

    jQuery入门(1)jQuery中万能的选择器 jQuery入门(2)使用jQuery操作元素的属性与样式 jQuery入门(3)事件与事件对象 jQuery入门(4)jQuery中的Ajax()应 ...

  2. PHP导出数据到CSV文件函数 csv_export()

    后台往往需要导出各种数据到 Excel文档中.通常我们是导出 .csv文件格式,PHP导出函数参考代码如下: /** * 导出数据到CSV文件 * * @param array $data 二维数组( ...

  3. 我爱模仿app之格瓦拉客户端

    最近有很多人问我,这个效果该怎么实现,那个功能该怎么实现.所以我准备开个专题,找一些app模仿,写一些示例代码,以供大家参考. 第一个下手的就是格瓦拉,没用过的可以下载看看,效果做的还是可以的,专场, ...

  4. Jenkins的使用

    参考: http://www.cnblogs.com/sunzhenchao/archive/2013/01/30/2883289.html

  5. word20161210

    gateway / 网关 gateway account / 网关帐户 Gateway Service for NetWare / NetWare 网关服务 GDI objects / GDI 对象 ...

  6. java.lang.UnsatisfiedLinkError: Couldn't load BaiduMapSDK 的解决方法

    遇到找不到so的同学们可以先从以下几个方面来检查问题: 1.so的名字是不是被修改了?我们SDK的so名字是固定的,如果您自行对它进行了重命名操作,那肯定是没法找到so的.2.so放置位置不对.so需 ...

  7. Python自动化之django视图

    视图 1.获取用户请求数据 request.GET request.POST request.FILES PS: GET:获取数据 POST:提交数据 request其他方法详解:http://dja ...

  8. 单词words

    论一类脑筋急转弯题和奇技淫巧题的解题技巧 [题意] 给定n个长为m且只包含xyz的字符串,定义两个字符串的相似程度为它们对应位置相同字符个数(比如xyz和yyz的相似程度为2,后两位相同),分别求出相 ...

  9. css实现翻页效果

    如图,鼠标移动到图上,实现右上角翻页的效果,本例主要border边框的设置. 一.基本概念 <html> <head> <style> #demo{ width:0 ...

  10. MySQL Binlog Mixed模式记录成Row格式

    背景: 一个简单的主从结构,主的binlog format是Mixed模式,在执行一条简单的导入语句时,通过mysqlbinlog导出发现记录的Binlog全部变成了Row的格式(明明设置的是Mixe ...