C++ 11 auto & decltype

转载 2015年11月21日 16:41:19
C++ 11中引入的auto主要有两种用途:自动类型推断和返回值占位。auto在C++ 98中的标识临时变量的语义,由于使用极少且多余,在C++ 11中已被删除。
      auto自动类型推断,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推断,可以大大简化我们的编程工作。下面是一些使用auto的例子。

 auto a;                 // 错误,没有初始化表达式,无法推断出a的类型
 auto int a = 10;        // 错误,auto临时变量的语义在C++ 11中已不存在
 auto a = 10;
 auto c = 'A';
 auto s("hello");
 vector<int> vctTemp;
 auto it = vctTemp.begin();
 auto ptr = [](){ cout << "hello world" << endl; };

      另外,在使用模板技术时,如果某个变量的类型依赖于模板参数,不使用auto将很难确定变量的类型(使用auto后,将由编译器自动进行确定)。下面是一个具体的例子。

template <class T, class U>
void Multiply(T t, U u)
{
 auto v = t*u;
}

      auto返回值占位,主要与decltype配合使用,用于返回值类型后置时的占位。


template <class T, class U>
 auto Multiply(T t, U u)->decltype(t*u)
{
 typedef decltype(t*u) NewType;
 NewType *pResult = new NewType(t*u);
 return *pResult;
}

      至于为什么需要将返回值类型后置,这里简单说明一下。如果没有后置,则函数声明为decltype(t*u) Multiply(T t, U u),但此时模板参数t和u还未声明,编译无法通
过。另外,如果非要使用返回值类型前置的形式,也可以将函数声明为decltype((*(T *)0)*(*(U *)0)) Multiply(T t, U u),但这种形式比较晦涩难懂,因此不推荐采用。


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

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

C++11新特性之auto&decltype

C++11中引入了auto&decltype关键字实现类型推导,通过这两个字可以方便的获取复杂的类型还可以简化代码,提高编码效率。 auto关键字 auto类型推导 C++98/03中一直就有auto...
  • hailong0715
  • hailong0715
  • 2016年12月29日 16:39
  • 923

C++11 auto和decltype推导规则

C++11 auto和decltype推导规则
  • ggz631047367
  • ggz631047367
  • 2015年09月05日 10:54
  • 1138

C++11 auto and decltype

1、auto关键字 C++新标准引入auto关键词,此auto与之前C语言的auto意义已经不一样了。 这里的auto是修饰未知变量的类型,编译器会通过此变量的初始化自动推导变量的类型。 例如:au...
  • hjx5200
  • hjx5200
  • 2015年01月05日 15:07
  • 3360

C++基本概念——细数auto和decltype之间的区别

本文主要描述了decltype和auto的区别,以及使用方法。
  • qq_14982047
  • qq_14982047
  • 2016年02月03日 10:02
  • 2124

auto decltype 用于返回值类型后置时的占位

decltype是 GCC 实现的第一个 C++ 11 新特性。它实际上起源于一个相当古老的 GNU 扩展关键字——__typeof__。这个非标准关键字也能够在 C 语言中使用,GNU Compil...
  • wangweitingaabbcc
  • wangweitingaabbcc
  • 2015年08月05日 12:17
  • 1543

C++11之decltype

在C++中经常要用到很长的变量名,如果已经有变量和你将使用的变量是一个类型,即可使用decltype关键字来申明一样的类型变量。...
  • hackmind
  • hackmind
  • 2014年04月20日 23:12
  • 4822

C++ 11 auto & decltype

http://www.cnblogs.com/hujian/archive/2012/02/15/2352050.html 【原】C++ 11 auto & decltype ...
  • anypkv
  • anypkv
  • 2014年09月04日 20:08
  • 285

c++标准14取消decltype推算函数返回类型

Table of Contents1. c++11之前不支持auto关键字2. c++11支持auto关键字2.1. 但是不能自动推断函数返回类型2.2. 使用-> decltype来声明返回类型3....
  • sheismylife
  • sheismylife
  • 2015年12月27日 10:25
  • 3153

C++11中decltype的使用

C++11中decltype的使用
  • fengbingchun
  • fengbingchun
  • 2016年09月11日 16:37
  • 885
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ 11 auto & decltype
举报原因:
原因补充:

(最多只允许输入30个字)