c++11 decltype

decltype实际上有点像auto的反函数,auto可以让你声明一个变量,而decltype则可以从一个变量或表达式中得到类型。decltype在C++11标准制定时引入,主要是为泛型编程而设计,以解决泛型编程中,由于有些类型由模板参数决定,而难以(甚至不可能)表示之的问题。decltype无法在派生类声明和析构函数调用中使用。
类似于sizeof操作符,decltype也不需对其操作数求值。粗略来说,decltype(e)返回类型前,进行了如下推导: 

若表达式e指向一个局部变量、命名空间作用域变量、静态成员变量或函数参数,那么 返回类型即为该变量(或参数)的“声明类型”; 
若e是一个左值(lvalue,即“可寻址值”),则decltype(e)将返回T&,其中T为e的类型;
若e是一个x值(xvalue),则返回值为T&&; 
若e是一个纯右值(prvalue),则返回值为T。

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <string>
#include <vector>
#include <map> void mytest()
{
int i;
decltype(i)j = ;
std::cout << typeid(j).name() << std::endl; // j ---> int float a;
double b;
decltype(a+b) c;
std::cout << typeid(c).name() << std::endl; // c ---> double std::vector<int> vec;
typedef decltype(vec.begin()) vectype;
vectype k;
std::cout << typeid(k).name() << std::endl;
for (k = vec.begin(); k < vec.end(); k++)
{
// do some thing ...
} enum // 匿名枚举变量
{
OK, Error, Warning
} flag;
decltype(flag) tmp = OK;
std::cout << typeid(tmp).name() << std::endl; return;
} int main()
{
mytest(); system("pause");
return ;
}

c++11 decltype的更多相关文章

  1. 不支持C++11 decltype的噩耗

    前言:因为公司现在使用vs2008,所以很多c++11的新特性还未能使用,导致写了很多冤枉代码. 最初引擎的数学库非常简单,使用起来也不方便,例如: float FastLerp(const floa ...

  2. c++ 11 游记 之 decltype constexpr

    title: c++ 11 游记 1 keyword :c++ 11 decltype constexpr 作者:titer1 zhangyu 出处:www.drysaltery.com 联系:130 ...

  3. 转:C++11常用新特性快速一览

    转载至:https://blog.csdn.net/jiange_zh/article/details/79356417 1.nullptr nullptr 出现的目的是为了替代 NULL. 在某种意 ...

  4. [c++] Templates

    Template是编译时多态.所有的模板都是在编译时产生对应的代码,它没有面向对象中的虚表,无法实现动态多态. Function Template A function template is a p ...

  5. C++ Template Operator

    #include <iostream> #include <string> #include <deque> #include <stdexcept> ...

  6. [C/C++]C++声明

    [注]本文是Declarations的翻译和注解版. https://msdn.microsoft.com/en-us/library/f432x8c6.aspx 1.声明: 我们通过声明往C++程序 ...

  7. C++ Template 编程,泛型编程练习

    #include <iostream> #include <string> #include <deque> #include <stdexcept> ...

  8. C/C++中字符串String及字符操作方法

    本文总结C/C++中字符串操作方法,还在学习中,不定期更新. .. 字符串的输入方法 1.单个单词能够直接用std::cin,由于:std::cin读取并忽略开头全部的空白字符(如空格,换行符,制表符 ...

  9. 地区sql

    /*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : lo ...

随机推荐

  1. Spark1.0.0属性配置

    1:Spark1.0.0属性配置方式 Spark属性提供了大部分应用程序的控制项,并且可以单独为每个应用程序进行配置. 在Spark1.0.0提供了3种方式的属性配置: SparkConf方式 Spa ...

  2. A Theoretical Analysis of Feature Pooling in Visual Recognition

    这篇是10年ICML的论文,但是它是从原理上来分析池化的原因,因为池化的好坏的确会影响到结果,比如有除了最大池化和均值池化,还有随机池化等等,在eccv14中海油在顶层加个空间金字塔池化的方法.可谓多 ...

  3. Hadoop、Yarn和vcpu资源的配置

    转载自:https://www.cnblogs.com/S-tec-songjian/p/5740691.html Hadoop  YARN同时支持内存和CPU两种资源的调度(默认只支持内存,如果想进 ...

  4. [HAOI2010]订货 BZOJ2424

    分析: 能看出来,这是一个费用流的题,建图很朴实,i连i+1,费用为存储费用,流量为仓库容量,之后S连i,费用为单价,流量为inf,之后i连T,流量为a[i],费用为0,之后裸上费用流... 附上代码 ...

  5. Java Web乱码分析及解决方案

    1.  什么是URL编码. URL编码是一种浏览器用来打包表单输入的格式,浏览器从表单中获取所有的name和其对应的value,将他们以name/value编码方式作为URL的一部分或者分离的发送到服 ...

  6. 在 R 中估计 GARCH 参数存在的问题

    目录 在 R 中估计 GARCH 参数存在的问题 GARCH 模型基础 估计 GARCH 参数 fGarch 参数估计的行为 结论 译后记 在 R 中估计 GARCH 参数存在的问题 本文翻译自< ...

  7. Exp02

    使用netcat后门工具 原理示意图 使用netcat获取主机操作Shell,cron启动 Win获取Linux Shell Linux获取Win Shell cron启动 用man -k指令查看有关 ...

  8. Linux中tty、pty、pts的概念区别 转载

    基本概念: > tty(终端设备的统称): tty一词源于Teletypes,或teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西 ...

  9. TMS320VC5509驱动AT24C02

    1. 刚开始的波形不太对,比如如下代码 i2c_status = I2C_write( at24c02_write_buf, //pointer to data array , //length of ...

  10. 蓝牙重启case之:hardware error

    蓝牙的通信分为host和controller,host端发送数据和命令到controller,controller 上传event以及数据到host端,这要求上下两端的通信要求状态一致性. 当发生状态 ...