decltype

C++中,decltype作为操作符,用于查询表达式的数据类型。decltype在C++11标准制定时引入,主要是为泛型编程而设计,以解决泛型编程中,由于有些类型由模板参数决定,而难以(甚至不可能)表示之的问题。

泛型编程在整个1990年代越发流行,对实现类型推导机制的需求也应运而生。为此,许多编译器厂商都基于程序语言现有的功能,自行实现了这类操作符,其实现如typeof,以及一些功能有限,但更易移植的实现。2002年间,比雅尼·斯特劳斯特鲁普提议在C++内标准化这类操作符,并将之加入C++;且建议命之为“decltype”,以反映其具有获取表达式的“声明类型”(Declared Type)的功能。

从语义上说,decltype的设计适合于通用库编写者与编程新手。总体上说,对于目标对象或函数,由decltype推导出的类型与源码中的定义可精确匹配。而正如sizeof操作符一样,decltype亦不需对操作数求值。

时间: 2024-08-25 16:45:00

decltype的相关文章

《Effective Modern C++》翻译--条款3: 理解decltype

条款3:理解decltype decltype 是一个非常有趣的怪兽.如果提供了一个名字或是表达式,decltype关键字将会告诉你这个名字或这个表达式的类型.通常情况下,结果与你的期望吻合.然而有些时候,decltype产生的结果领你挠头,使你去翻阅参考书或在网上问答中寻求答案. 我们先从通常的情况开始-这里没有暗藏惊喜.联系到在模板类型推导和auto类型推导中发生了什么,decltype关键字就像鹦鹉学舌一样,对于变量名称或表达式类型的推导跟模板类型推导和auto类型推导没有任何变化: co

【C++注意事项】5 Top-level const , The auto and decltype Type Specifier

top-level const As we've seen, a pointer is an object that can point to a different object. As a result, we can talk independently about whether a pointer is const and whether the objects to which it can point are const. we use the top-level const to

关于auto和decltype

1 auto会忽略顶层const,保留底层const 2 3 int i = 0; 4 5 const int* const p = &i; 6 7 auto p2 = p; //p2是const int*,不是const int* const 8 //*p2 = 4; //错误,p指向常量 9 p2 = nullptr; //正确,p2本身不是常量 10 11 12 auto不会保留引用类型,应该使用auto& 13 14 int& x = i; 15 16 auto m = x

C++11 新特性之 decltype关键字

decltype关键字用于查询表达式的类型.与其他特性结合起来之后会有意想不到的效果. decltype的语法是 decltype (expression) 实例: #include <iostream> #include <typeinfo> using namespace std; int main() { int i; double d; float f; struct A { int i; double d; }; decltype(i) i1; cout <<

C++11之decltype

使用场景 在C++中常常要用到非常长的变量名.假设已经有变量和你将使用的变量是一个类型.就可以使用decltypekeyword 来申明一样的类型变量. decltype原理      返回现有变量类型.decltype是一个keyword,而不是一个函数,这有啥差别呢?decltype在编译阶段返回变量类 型,而不是在执行阶段传递不同变量返回不同值. decltype使用范例 1.复杂已知变量类型 map<string, vector<string>> str_map; decl

类型别名、auto类型说明符和decltype类型说明符初探

类型别名 类型别名顾名思义是某种类型的另一个名字,常用于简化类型,易于理解和使用. 传统方法是使用关键字 typedef .新标准规定使用别名声明(alias declaration)来定义类型别名. using zhengxing = int; 如果某个类型别名指代的是复合类型或常量,那么把它用到声明语句中往往会让人理解出错. typedef char *cstring;//cstring 是 char* 的别名 const cstring cstr = 0;//cstr 是指向 char 的

auto和decltype的用法总结

一, auto 1, auto的作用 一般来说, 在把一个表达式或者函数的返回值赋给一个对象的时候, 我们必须要知道这个表达式的返回类型, 但是有的时候我们很难或者无法知道这个表达式或者函数的返回类型. 这个时候, 我们就可以使用auto关键字来让编译器帮助我们分析表达式或者函数所属的类型. 比如: auto item = val1 + val2; auto red = LayerColor::create(Color4B(255, 100, 100, 255), 200, 100); 如果va

第二十三章 C++11特性之decltype

decltype 类似于sizeof操作符,decltype也不需对其操作数求值.粗略来说,decltype(e)返回类型前,进行了如下推导: 1.若表达式e指向一个局部变量.命名空间作用域变量.静态成员变量或函数参数,那么返回类型即为该变量(或参数)的“声明类型”: 2.若e是一个左值(lvalue,即“可寻址值”),则decltype(e)将返回T&,其中T为e的类型: 3.若e是一个x值(xvalue),则返回值为T&&: 4.若e是一个纯右值(prvalue),则返回值为T

关注C++细节——C++11新标准之decltype的使用注意

c++11新特性--decltype decltype是C++11添加的一个新的关键字,目的是选择并返回操作数的数据类型,重要的是,在此过程中编译器分析表达式并得到它的类型,却不实际计算表达式的值. 对于内置类型的对象,使用decltype很直观,但当参数为复合类型的时候就应该注意一些使用细节问题. 1.当decltype作用于数组的时候就应该小心了,本文作者(CSDN   iaccepted). intiarr[10] = {0}; decltype(iarr)ib; 这个时候ib的定义等价于