c++11 decltype
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的更多相关文章
- 不支持C++11 decltype的噩耗
前言:因为公司现在使用vs2008,所以很多c++11的新特性还未能使用,导致写了很多冤枉代码. 最初引擎的数学库非常简单,使用起来也不方便,例如: float FastLerp(const floa ...
- c++ 11 游记 之 decltype constexpr
title: c++ 11 游记 1 keyword :c++ 11 decltype constexpr 作者:titer1 zhangyu 出处:www.drysaltery.com 联系:130 ...
- 转:C++11常用新特性快速一览
转载至:https://blog.csdn.net/jiange_zh/article/details/79356417 1.nullptr nullptr 出现的目的是为了替代 NULL. 在某种意 ...
- [c++] Templates
Template是编译时多态.所有的模板都是在编译时产生对应的代码,它没有面向对象中的虚表,无法实现动态多态. Function Template A function template is a p ...
- C++ Template Operator
#include <iostream> #include <string> #include <deque> #include <stdexcept> ...
- [C/C++]C++声明
[注]本文是Declarations的翻译和注解版. https://msdn.microsoft.com/en-us/library/f432x8c6.aspx 1.声明: 我们通过声明往C++程序 ...
- C++ Template 编程,泛型编程练习
#include <iostream> #include <string> #include <deque> #include <stdexcept> ...
- C/C++中字符串String及字符操作方法
本文总结C/C++中字符串操作方法,还在学习中,不定期更新. .. 字符串的输入方法 1.单个单词能够直接用std::cin,由于:std::cin读取并忽略开头全部的空白字符(如空格,换行符,制表符 ...
- 地区sql
/*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : lo ...
随机推荐
- odoo销售转生产
<!--form view 一个form视图足以--><record id="view_sale_tomrp_form" model="ir.ui.vi ...
- 20155306 白皎 0day漏洞——基础知识
20155306 白皎 0day漏洞--(第一篇)基础知识 写在前面: 本次免考实践方向是0day漏洞,以博客的形式记录了我的学习实践过程.第一篇博客主要围绕什么是0day漏洞以及一些以后学习中需要的 ...
- vue-cli 动态绑定图片失败
1.template 中引用图片,第一个为固定路径,第二个为动态绑定路径 eg: <img src="XXXXXX.png" alt=""> < ...
- JavaEE笔记(十)
#Spring 为了配置bean对象和维护bean对象之间关系的一个容器框架 #三种注入方法 1 Setter注入2 构造参数注入3 注解注入(原理同1) #自动装配(autowire) 模式 说明 ...
- mfc CListBox
通过ID操作对象 CListBox(列表框)控件 CListBox类常用成员 CListBox插入数据 CListBox删除数据 CListBox运用示例 一.CListBox类常用成员 CListB ...
- SSIS 连接数据
通常情况下,ETL方案需要同时访问两个或多个数据源,并把结果合并为单个数据流,输出到目标表中.为了向目标表中提供统一的数据结构,需要把多个数据源连接在一起.数据连接的另外一种用法,就是根据现有的数据, ...
- JQ_One()函数特效
先看一个例子,当点击 p 元素时,增加该元素的文本大小,代码如下:<script type="text/javascript" src="http://keleyi ...
- Linux Socket 编程简介
在 TCP/IP 协议中,"IP地址 + TCP或UDP端口号" 可以唯一标识网络通讯中的一个进程,"IP地址+端口号" 就称为 socket.本文以一个简单的 ...
- git常用命令学习总结
英语真是我的硬伤啊,提示都要用百度翻译看一遍,费劲... 下面是我日常工作中遇到的各种问题汇总 1.远程服务器分支与本地代码合并 我第一次打出 git pull 显示下面的错误 就怪我英语太差,都懒得 ...
- Verilog HDL数组(存储器)操作
本文从本人的163博客搬迁至此. 引用了http://blog.sina.com.cn/s/blog_9424755f0101rhrh.html Verilog HDL中常采用数组方式来对存储器进行建 ...