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 学习1:类型自动推导 auto和decltype

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

C++Primer第五版【学习笔记】——auto,decltype【C++11】

1. auto 我们经常会需要将表达式的值保存在变量中。要声明变量,我们需要知道表达式的类型。但是要确定表达式的类型,有时候是很困难的。C++11新标准引入了auto类型声明符,使变量的类型由编译器...

C++11中的新关键字:auto与decltype

auto C++11之前,最无用的关键字 我们知道,在C++11以前,auto关键字的作用是声明函数内的局部变量为自动的变量。也就是说,它的作用是指出当前的变量为局部变量。是不是很多余?在函数里面声明...

C++11 decltype 和auto

C++ decltype 自动推导类型 int var; const int&& fx(); struct A { double x; } const A* a = new A(); ...

C++11/14/17 auto & decltype

C9803中的auto C11中的auto与decltype auto 使用和注意事项 类型推导规则 decltype 使用和注意事项 C14中的auto与decltype C17中的auto与dec...

C++11:"auto"和"decltype"类型说明符的思考

//例1//编译器:gcc 4.8.1 系统:windows#include int main() { int i = 1; auto a = i; decltype(i) d = 2; ...

c++11之auto自动类型推断和decltype类型获取

出处 http://blog.csdn.net/srzhz/article/details/7934483 自动类型推断 当编译器能够在一个变量的声明时候就推断出它的类型,那么你就能够用auto关...

C++11常用特性学习-易学易用新特性(>>/auto/decltype/范围的for)

C11易学易用新特性C11中有些特性例如auto类型推导、基于范围的for范围等非常易用的特性,非常具有亲和力,也能够显著的提高编码效率,已经基本都被目前主流编译器使用。规范这些特性的使用,可以显著提...

c++11 学习及测试(auto,decltype,range for...)

花费一星期学校了一下c++11,重看c++ prime感觉第五版的例子比第四版好了很多呀。而且还加入了设计模式之类的东西。也或许是之前看的时候还不知道什么是设计模式T_T。 写了一写测试代码,记录一下...

C++11:使用 auto/decltype/result_of使代码可读易维护

C++11 终于加入了自动类型推导。以前,我们不得不使用Boost的相关组件来实现,现在,我们可以使用“原生态”的自动类型推导了! C++引入自动的类型推导,并不是在向动态语言(强类型语言又称静态类...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ 11 auto & decltype
举报原因:
原因补充:

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