<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Decltype</id>
	<title>Decltype - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Decltype"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Decltype&amp;action=history"/>
	<updated>2026-06-29T07:52:33Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Decltype&amp;diff=1788038&amp;oldid=prev</id>
		<title>imported&gt;52-Feb：​/* 语义 */</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Decltype&amp;diff=1788038&amp;oldid=prev"/>
		<updated>2026-03-06T05:16:42Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;语义&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{noteta&lt;br /&gt;
|G1=IT&lt;br /&gt;
}}&lt;br /&gt;
{{lowercase|decltype}}&lt;br /&gt;
在[[C++程序设计语言]]中，&amp;lt;tt&amp;gt;&amp;#039;&amp;#039;&amp;#039;decltype&amp;#039;&amp;#039;&amp;#039;&amp;lt;/tt&amp;gt;作为&amp;#039;&amp;#039;&amp;#039;类型查询[[操作符]]&amp;#039;&amp;#039;&amp;#039;，用于获取[[表达式]]的[[数据类型]]。[[C++11]]标准正式引入&amp;lt;tt&amp;gt;decltype&amp;lt;/tt&amp;gt;，主要是为[[泛型|泛型编程]]而设计，以解决泛型编程中有些類型由[[模板 (C++)|模板]]参数决定而难以（甚至不可能）书写的痛点。&lt;br /&gt;
&lt;br /&gt;
从语义上看，&amp;lt;tt&amp;gt;decltype&amp;lt;/tt&amp;gt;的设计既适合通用库编写者，也对普通开发者友好。当表达式是变量名或函数参数时，由&amp;lt;tt&amp;gt;decltype&amp;lt;/tt&amp;gt;推导出的类型与源代码中声明的类型完全一致。与&amp;lt;tt&amp;gt;[[sizeof]]&amp;lt;/tt&amp;gt;操作符一样，&amp;lt;tt&amp;gt;decltype&amp;lt;/tt&amp;gt;不对操作数求值，仅在编译期分析类型。&lt;br /&gt;
==简要理解==&lt;br /&gt;
虽然C++规范或大多数的文档及书籍都将&amp;lt;tt&amp;gt;decltype&amp;lt;/tt&amp;gt;定义为一个操作符，但是针对初学者而言，应将此操作符理解为一种特殊的类型声明符，而不是像一些强类型语言那样将此操作符理解为一个带返回值的函数。为说明此问题，举例如下：&lt;br /&gt;
&lt;br /&gt;
对于其它语言的开发者，可能写出如下的代码：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using std::cout;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
	int n = 12;&lt;br /&gt;
	cout &amp;lt;&amp;lt; decltype(n);//實際上decltype與js或C#的typeof完全不一樣&lt;br /&gt;
	getchar();&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
相反，可以将&amp;lt;tt&amp;gt;decltype&amp;lt;/tt&amp;gt;视为一种特殊的类型声明方式，C++语言里面类似的功能为[[Auto (C++)|自动变量]]。&lt;br /&gt;
&lt;br /&gt;
举例：设开发人员无法确定一个表达式exp()的值类型，然而需要声明一个与之类型匹配的变量，则可以如下声明：&lt;br /&gt;
&lt;br /&gt;
decltype(exp()) x;&lt;br /&gt;
&lt;br /&gt;
这与C++11引入的&amp;lt;tt&amp;gt;auto&amp;lt;/tt&amp;gt;自动类型推导形成了互补：&amp;lt;tt&amp;gt;auto&amp;lt;/tt&amp;gt;用于变量初始化时的类型省略，而&amp;lt;tt&amp;gt;decltype&amp;lt;/tt&amp;gt;更擅长提取已有表达式的类型，常用于模板元编程和返回类型后置等场景。&lt;br /&gt;
== 设计构想 ==&lt;br /&gt;
随着C++引入[[模板 (C++)|模板]]，以及由[[标准模板库]]引领的泛型编程逐渐兴起，实现一个能获取表达式类型的机制的需求便由此出现，而这一机制常称为&amp;lt;tt&amp;gt;typeof&amp;lt;/tt&amp;gt;。在泛型编程中，若类型由函数参数决定，则获知之常非易事&amp;lt;ref name=&amp;quot;n1478&amp;quot;/&amp;gt;&amp;lt;ref name=&amp;quot;cleanup&amp;quot;/&amp;gt;，在需要获取函数模板实例化的返回类型时尤然&amp;lt;ref name=&amp;quot;n1478&amp;quot;/&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
为此，许多编译器厂商都基于程序语言现有的功能，自行实现了这类操作符，其实现如&amp;lt;tt&amp;gt;[[typeof]]&amp;lt;/tt&amp;gt;，以及一些功能有限，但更易移植的实现，以满足这一需求&amp;lt;ref name=&amp;quot;ddj_gibbons&amp;quot;/&amp;gt;。早在C++还未完全标准化的1997年，布莱恩·帕克（Brian Parker）就基于&amp;lt;tt&amp;gt;sizeof&amp;lt;/tt&amp;gt;操作符，提出了一种可移植的解决方案&amp;lt;ref name=&amp;quot;ddj_gibbons&amp;quot;/&amp;gt;。对此，比尔·吉本斯（Bill Gibbons）则提出，这一方案仍有诸多限制，而且通常来说，直接引入&amp;lt;tt&amp;gt;typeof&amp;lt;/tt&amp;gt;机制效果都更好&amp;lt;ref name=&amp;quot;ddj_gibbons&amp;quot;/&amp;gt;。2000年10月，[[Andrei Alexandrescu|安德烈·亚历山德雷斯库]]在IT技术杂志《{{Tsl|en|Dr. Dobb&amp;#039;s Journal}}》上评论道：“（若）有typeof（操作符），撰写和理解模板代码就会便易许多。&amp;lt;ref name=&amp;quot;ddj_andrei_sizeof&amp;quot;/&amp;gt;”他也提到“typeof和sizeof（操作符）有相同的后端，（这是）因为sizeof无论如何必须去计算类型。&amp;lt;ref name=&amp;quot;ddj_andrei_sizeof&amp;quot;/&amp;gt;”{{Tsl|en|Andrew Koenig (programmer)|Andrew Koenig (程序员)|安德鲁·克尼格}}与芭芭拉·E·摩（Barbara E. Moo）也谈到内建于程序语言中的&amp;lt;tt&amp;gt;typeof&amp;lt;/tt&amp;gt;功能非常有用，但也提醒道“使用时常会引入一些难以发觉的程序错误，且尚有无法解决的问题（即并非万用）。&amp;lt;ref name=&amp;quot;ddj_koenig&amp;quot;/&amp;gt;”并提出可以利用类型转换（如使用[[标准模板库]]所提供的[[typedef]]），更有效、更通用地实现这一功能&amp;lt;ref name=&amp;quot;ddj_koenig&amp;quot;/&amp;gt;。但是，史蒂夫·丹斯特（Steve Dewhurst）则称如此转换“在设计与发布上花费巨大”，而且“采用直接提取表达式类型的方法更简单&amp;lt;ref name=&amp;quot;ddj_steve&amp;quot;/&amp;gt;”（大意）。2011年间，在一片关于[[C++0x]]的文章中，克尼格和摩预言道：“decltype将会广泛用于为每日的程序编写提供便利。&amp;lt;ref name=&amp;quot;ddj_koenig2011&amp;quot;/&amp;gt;”&lt;br /&gt;
&lt;br /&gt;
2002年间， [[比雅尼·斯特劳斯特鲁普]]提议扩充C++程序语言，为之引入查询表达式类型，以及不必指明类型便可初始化对象的机制&amp;lt;ref name=&amp;quot;n1478&amp;quot;/&amp;gt;。斯特劳斯特鲁普注意到，在[[GCC]]与{{Tsl|en|Edison Design Group|爱迪生设计集团|EDG}}编译器中，&amp;lt;tt&amp;gt;typeof&amp;lt;/tt&amp;gt;所提供的“引用丢弃”（reference-dropping）语义可能存在问题&amp;lt;ref name=&amp;quot;n1478&amp;quot;/&amp;gt;；另一方面，若使用基于表达式[[值 (计算机科学)|左值性]]、返回一个引用类型的操作符实现之，又难以理解。于是，在呈交给C++标准委员会的初始提案中，便将两种实现方法杂糅起来：只有当表达式的声明类型包含一个引用时，操作符才会返回一个引用类型。为强调推导出的类型能确实反映表达式的声明类型，提案中提议将此操作符命名为&amp;lt;tt&amp;gt;decltype&amp;lt;/tt&amp;gt;&amp;lt;ref name=&amp;quot;n1478&amp;quot;/&amp;gt;。提案还提及了&amp;lt;tt&amp;gt;decltype&amp;lt;/tt&amp;gt;的一项主要设计初衷，也即让编写完美的[[包装函数|转发函数]]成为可能&amp;lt;ref name=&amp;quot;n1705&amp;quot;/&amp;gt;。在编程时，程序员有时需要编写一个泛型转发函数，使之不论以何种类型实例化，都能返回同于包装函数的类型，而若无&amp;lt;tt&amp;gt;decltype&amp;lt;/tt&amp;gt;操作符，就几乎不可能做到这一点&amp;lt;ref name=&amp;quot;n1705&amp;quot;/&amp;gt;。decltype的样例代码如下所示，其中利用了[[C++11]]标准中的“[[C++11#另一種的函式語法|返回类型后置]]”（trailing-return-type）语法&amp;lt;ref name=&amp;quot;n1705&amp;quot;/&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int&amp;amp; foo(int&amp;amp; i);&lt;br /&gt;
float foo(float&amp;amp; f);&lt;br /&gt;
&lt;br /&gt;
template &amp;lt;class T&amp;gt; auto transparent_forwarder(T&amp;amp; t) −&amp;gt; decltype(foo(t)) {&lt;br /&gt;
  return foo(t);&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;decltype&amp;lt;/tt&amp;gt;便是本段代码的核心部分，用于保存“包装函数是否返回一个引用类型”这一信息 &amp;lt;ref name=&amp;quot;msdn_decltype&amp;quot; /&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 语义 ==&lt;br /&gt;
类似于&amp;lt;tt&amp;gt;sizeof&amp;lt;/tt&amp;gt;操作符，&amp;lt;tt&amp;gt;decltype&amp;lt;/tt&amp;gt;不对其操作数求值&amp;lt;ref name=&amp;quot;n2343&amp;quot;/&amp;gt;。粗略来说，&amp;lt;tt&amp;gt;decltype(e)&amp;lt;/tt&amp;gt;返回类型前，进行了如下推导&amp;lt;ref name=&amp;quot;n1478&amp;quot;/&amp;gt;：&lt;br /&gt;
*若表达式&amp;lt;tt&amp;gt;e&amp;lt;/tt&amp;gt;为一个无括号的变量、函数参数、类成员访问，那么返回类型即为该变量或参数或类成员在源程序中的“声明类型”；&lt;br /&gt;
*否则的话，根据表达式的值分类（value categories），设T为e的类型：&lt;br /&gt;
**若&amp;lt;tt&amp;gt;e&amp;lt;/tt&amp;gt;是一个[[值 (计算机科学)|左值]]（lvalue，即“可寻址值”），则&amp;lt;tt&amp;gt;decltype(e)&amp;lt;/tt&amp;gt;将返回&amp;lt;tt&amp;gt;T&amp;amp;&amp;lt;/tt&amp;gt;；&lt;br /&gt;
**若&amp;lt;tt&amp;gt;e&amp;lt;/tt&amp;gt;是一个[[值 (计算机科学)|临终值]]（xvalue），则返回值为&amp;lt;tt&amp;gt;[[右值引用|T&amp;amp;&amp;amp;]]&amp;lt;/tt&amp;gt;；&lt;br /&gt;
**若&amp;lt;tt&amp;gt;e&amp;lt;/tt&amp;gt;是一个[[值 (计算机科学)|纯右值]]（prvalue），则返回值为&amp;lt;tt&amp;gt;T&amp;lt;/tt&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
这些语义是为满足通用库编写者的需求而设计，但由于&amp;lt;tt&amp;gt;decltype&amp;lt;/tt&amp;gt;的返回类型总与对象（或函数）的定义类型相匹配，这对编程新手来说也更为直观&amp;lt;ref name=&amp;quot;n1478&amp;quot;/&amp;gt;。更正式地说，规则1只适用于不带括号的标识符表达式（id-expression）与类成员访问表达式&amp;lt;ref name=&amp;quot;n2914&amp;quot;/&amp;gt;&amp;lt;ref name=&amp;quot;defects&amp;quot;/&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
示例：括号对类型推导的影响&amp;lt;ref name=&amp;quot;n2914&amp;quot;/&amp;gt;{{efn|在示例代码中，为“bar()”推导出的类型就是纯粹的int，而非const int。这是因为，若未静态声明不同类型，则非用户定义类型的纯右值的类型常不带cv限定符（即不带const和volatile）。}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
const int&amp;amp;&amp;amp; foo(); //返回右值引用&lt;br /&gt;
const int bar();//返回值类型&lt;br /&gt;
int i;&lt;br /&gt;
struct A { double x; };&lt;br /&gt;
const A* a = new A();&lt;br /&gt;
decltype(foo()) x1; // 类型为const int&amp;amp;&amp;amp;&lt;br /&gt;
decltype(bar()) x2; // 类型为int&lt;br /&gt;
decltype(i) x3; // 类型为int&lt;br /&gt;
decltype(a-&amp;gt;x) x4; // 类型为double&lt;br /&gt;
decltype((a-&amp;gt;x)) x5; // 类型为const double&amp;amp; ← 注意这里多了一层引用&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
关键差异在于最后一行：最后两个对&amp;lt;tt&amp;gt;decltype&amp;lt;/tt&amp;gt;的调用，返回结果有所不同。这是因为，带括号的表达式&amp;lt;tt&amp;gt;(a-&amp;gt;x)&amp;lt;/tt&amp;gt;既非“标识符表达式”，亦非类访问表达式，因而未指向一个命名对象&amp;lt;ref name=&amp;quot;closedissues&amp;quot;/&amp;gt;，而是一个左值，于是推导类型便为“指向表达式类型的引用”，亦即&amp;lt;tt&amp;gt;const double&amp;amp;&amp;lt;/tt&amp;gt;&amp;lt;ref name=&amp;quot;n2343&amp;quot;/&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
在2008年12月，雅克·雅尔维（Jaakko Järvi）向标准委员会指出一个问题：在C++中，“带限定标识符”（qualified-id）无法由&amp;lt;tt&amp;gt;decltype&amp;lt;/tt&amp;gt;作成&amp;lt;ref name=&amp;quot;active_issues&amp;quot;/&amp;gt;，而这正与“&amp;lt;tt&amp;gt;decltype(e)&amp;lt;/tt&amp;gt;可作‘类型定义名’（typedef-name）看待”的设计初衷不一致&amp;lt;ref name=&amp;quot;n2115&amp;quot;/&amp;gt;。在评论标准委员会为[[C++0x]]（[[C++11]]前名）制定的正式草案时，日本[[ISO]]会员成员提到，“一个定义域操作符（::）不适用于decltype，但本应适用才对。（若能解决这一问题，则）这在需要从实例中获取成员类型（嵌套类型）很有用，如下所示&amp;lt;ref name=&amp;quot;cd1_comments&amp;quot;/&amp;gt;”：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
vector&amp;lt;int&amp;gt; v;&lt;br /&gt;
decltype(v)::value_type i = 0; // int i = 0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这一问题，以及其他相似问题（关于&amp;lt;tt&amp;gt;decltype&amp;lt;/tt&amp;gt;无法在[[子类|衍生类]]声明和[[析构函数]]调用中使用），都交由大卫·范德沃德（David Vandevoorde）处理，并在2010年3月投票纳入工作日程表&amp;lt;ref name=&amp;quot;n3084&amp;quot;/&amp;gt;&amp;lt;ref name=&amp;quot;n3031&amp;quot;/&amp;gt;。解决办法是：如果表达式是纯用户定义类型（plain user defined type），即不是引用、指针、函数等，则&amp;lt;tt&amp;gt;decltype&amp;lt;/tt&amp;gt;表达式返回类名。这意味着可以访问嵌套类型。甚至可以用&amp;lt;code&amp;gt;decltype(expr)&amp;lt;/code&amp;gt;作为派生时的基类型。&lt;br /&gt;
&lt;br /&gt;
== 可用性 ==&lt;br /&gt;
&amp;lt;tt&amp;gt;decltype&amp;lt;/tt&amp;gt;包含于当前的C++标准[[C++11]]中&amp;lt;ref name=&amp;quot;n2914&amp;quot;/&amp;gt;，并由许多编译器以扩展的形式提供：[[微软]]在[[Visual C++|Visual C++ 2010]]编译器中提供了&amp;lt;tt&amp;gt;decltype&amp;lt;/tt&amp;gt;操作符，基本实现了标准委员会提案中所描述的语义，并且在[[C++/CLI|托管]]代码或原生代码中都可使用&amp;lt;ref name=&amp;quot;msdn_decltype&amp;quot;/&amp;gt;。据其文档称，这一实现“主要对编写模板库的开发者有用。&amp;lt;ref name=&amp;quot;msdn_decltype&amp;quot;/&amp;gt;”从2008年3月5日发布的4.3版开始&amp;lt;ref name=&amp;quot;gcc43&amp;quot;/&amp;gt;，[[GCC]] C++编译器也加入了&amp;lt;tt&amp;gt;decltype&amp;lt;/tt&amp;gt;操作符&amp;lt;ref name=&amp;quot;gcc0x&amp;quot;/&amp;gt;。这一操作符也已纳入了{{Tsl|en|CodeGear}}的[[C++ Builder|C++ Builder 2009]]&amp;lt;ref name=&amp;quot;codegear&amp;quot;/&amp;gt;、[[Intel C++编译器]]&amp;lt;ref name=&amp;quot;intel&amp;quot;/&amp;gt;与[[Clang]]&amp;lt;ref name=&amp;quot;clang&amp;quot;/&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 注释 ==&lt;br /&gt;
{{notelist|iger=}}&lt;br /&gt;
&lt;br /&gt;
== 参考资料 ==&lt;br /&gt;
{{reflist|2|refs=&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cleanup&amp;quot;&amp;gt;{{cite web|url=http://www.devx.com/cplus/10MinuteSolution/37854/1954|title=Clean Up Function Syntax Mess with &amp;#039;&amp;#039;decltype&amp;#039;&amp;#039;|last=Kalev|first=Danny|date=2008-05-08|publisher=DevX.com|accessdate=2009-09-04|archive-date=2012-02-20|archive-url=https://web.archive.org/web/20120220083955/http://www.devx.com/cplus/10MinuteSolution/37854/1954|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;ddj_gibbons&amp;quot;&amp;gt;{{cite web|url=http://www.ddj.com/cpp/184401310|title=A Portable &amp;quot;typeof&amp;quot; Operator|last=Gibbons|first=Bill|date=2000-11-01|publisher=&amp;#039;&amp;#039;Dr. Dobb&amp;#039;s Journal&amp;#039;&amp;#039;|accessdate=2009-09-03|archive-date=2019-09-24|archive-url=https://web.archive.org/web/20190924233514/https://www.drdobbs.com/|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;ddj_andrei_sizeof&amp;quot;&amp;gt;{{cite web|url=http://www.ddj.com/cpp/184403750|title=Generic&amp;lt;Programming&amp;gt;: Mappings between Types and Values|last=Alexandrescu|first=Andrei|date=2000-10-01|publisher=&amp;#039;&amp;#039;Dr. Dobb&amp;#039;s Journal&amp;#039;&amp;#039;|accessdate=2009-09-03|archive-date=2009-12-01|archive-url=https://web.archive.org/web/20091201084359/http://www.ddj.com/cpp/184403750|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;ddj_koenig&amp;quot;&amp;gt;{{cite web|url=http://www.ddj.com/cpp/184401487|title=C++ Made Easier: Naming Unknown Types|last=Koenig|first=Andrew|coauthors=Barbara E. Moo|date=2002-02-01|publisher=&amp;#039;&amp;#039;Dr. Dobb&amp;#039;s Journal&amp;#039;&amp;#039;|accessdate=2009-09-03|archive-date=2009-10-10|archive-url=https://web.archive.org/web/20091010024722/http://www.ddj.com/cpp/184401487|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;ddj_steve&amp;quot;&amp;gt;{{cite web|url=http://www.ddj.com/cpp/184401548|title=Common Knowledge: A Bitwise typeof Operator, Part 1|last=Dewhurst|first=Steve|date=2000-08-01|publisher=&amp;#039;&amp;#039;Dr. Dobb&amp;#039;s Journal&amp;#039;&amp;#039;|accessdate=2009-09-03|archive-date=2009-06-29|archive-url=https://web.archive.org/web/20090629152744/http://www.ddj.com/cpp/184401548|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;n1478&amp;quot;&amp;gt;{{cite web|url=http://std.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1478.pdf|title=Decltype and auto|last=Gregor|first=Douglas|coauthors=Järvi, Jaakko; Siek, Jeremy; Stroustrup, Bjarne|date=2003-04-28|publisher=ISO/IEC JTC1/SC22/WG21 – The C++ Standards Committee|accessdate=2009-08-13|archive-date=2011-06-04|archive-url=https://web.archive.org/web/20110604034920/http://std.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1478.pdf|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;ddj_koenig2011&amp;quot;&amp;gt;{{cite web|url=http://drdobbs.com/cpp/231002092?pgno=2|title=4 Useful New Features in C++0x|last=Koenig|first=Andrew|coauthors=Barbara E. Moo|date=2011-07-19|publisher=&amp;#039;&amp;#039;Dr. Dobb&amp;#039;s Journal&amp;#039;&amp;#039;|accessdate=2012-01-12|archive-date=2011-11-16|archive-url=https://web.archive.org/web/20111116033046/http://drdobbs.com/cpp/231002092?pgno=2|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;n1705&amp;quot;&amp;gt;{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1705.pdf|title=Decltype and auto (revision 4)|last=Dos Reis|first=Gabriel|coauthors=Järvi, Jaakko; Stroustrup, Bjarne|date=2004-10-12|publisher=ISO/IEC JTC1/SC22/WG21 – The C++ Standards Committee|accessdate=2009-09-04|archive-date=2009-07-04|archive-url=https://web.archive.org/web/20090704105244/http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2004/n1705.pdf|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;n2343&amp;quot;&amp;gt;{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf|title=Decltype (revision 7): proposed wording|last=Dos Reis|first=Gabriel|coauthors=Järvi, Jaakko; Stroustrup, Bjarne|date=2007-07-18|publisher=ISO/IEC JTC1/SC22/WG21 – The C++ Standards Committee|accessdate=2009-09-04|archive-date=2013-07-20|archive-url=https://www.webcitation.org/6IG9ls1XG?url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;defects&amp;quot;&amp;gt;{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2937.html|title=C++ Standard Core Language Defect Reports, Revision 65|last=Miller|first=William M.|date=2009-08-03|publisher=ISO/IEC JTC1/SC22/WG21 – The C++ Standards Committee|accessdate=2009-09-15|archive-date=2013-07-20|archive-url=https://www.webcitation.org/6IG9mX9f1?url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2937.html|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;n2914&amp;quot;&amp;gt;{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2914.pdf|title=Working Draft, Standard for Programming Language C++|last=Becker|first=Pete|publisher=ISO/IEC JTC1/SC22/WG21 – The C++ Standards Committee|accessdate=2009-09-04|archive-date=2013-07-20|archive-url=https://www.webcitation.org/6IG9nGuDq?url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2914.pdf|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;closedissues&amp;quot;&amp;gt;{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2938.html|title=C++ Standard Core Language Closed Issues, Revision 65|last=Miller|first=William M.|date=2009-08-03|publisher=ISO/IEC JTC1/SC22/WG21 – The C++ Standards Committee|accessdate=2009-09-04|archive-date=2009-09-11|archive-url=https://web.archive.org/web/20090911034148/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2938.html|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;msdn_decltype&amp;quot;&amp;gt;{{cite web|url=http://msdn.microsoft.com/en-us/library/dd537655(VS.100,loband).aspx|title=decltype Operator|publisher=Microsoft|accessdate=2009-09-04|archive-date=2017-04-01|archive-url=https://web.archive.org/web/20170401134906/https://msdn.microsoft.com/en-us/library/dd537655(VS.100,loband).aspx|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;gcc0x&amp;quot;&amp;gt;{{cite web|url=http://gcc.gnu.org/projects/cxx0x.html|title=C++0x Support in GCC|date=2009-08-27|publisher=Free Software Foundation|accessdate=2009-09-04|archive-date=2009-09-30|archive-url=https://web.archive.org/web/20090930185800/http://gcc.gnu.org/projects/cxx0x.html|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;gcc43&amp;quot;&amp;gt;{{cite web|url=http://gcc.gnu.org/gcc-4.3/|title=GCC 4.3 Release Series|date=2009-08-13|publisher=Free Software Foundation|accessdate=2009-09-04|archive-date=2009-09-03|archive-url=https://web.archive.org/web/20090903040240/http://gcc.gnu.org/gcc-4.3/|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;codegear&amp;quot;&amp;gt;{{cite web|url=http://docs.codegear.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devwin32/typespecifierdecltype_xml.html#|title=Type Specifier decltype (C++0x)|publisher=Embarcadero Technologies|accessdate=2009-09-04|deadurl=yes|archiveurl=https://web.archive.org/web/20110708173703/http://docs.codegear.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devwin32/typespecifierdecltype_xml.html|archivedate=2011-07-08}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;intel&amp;quot;&amp;gt;{{cite web|url=http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/cpp/win/compiler_c/copts/ccpp_options/option_std.htm|title=std, Qstd|publisher=Intel Corporation|accessdate=2009-09-04|archive-date=2019-09-24|archive-url=https://web.archive.org/web/20190924233501/https://software.intel.com/en-us/mpi-library/documentation/get-started|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;clang&amp;quot;&amp;gt;{{cite web |url=http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-January/013013.html |title=New C++0x feature support in Clang |date=2011-01-26 |last=Gregor |first=Douglas |deadurl=yes |archiveurl=https://web.archive.org/web/20110130065354/http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-January/013013.html |archivedate=2011-01-30 |accessdate=2013-06-26 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;active_issues&amp;quot;&amp;gt;{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html|title=C++ Standard Core Language Active Issues, Revision 66|last=Miller|first=William M.|date=2009-09-29|publisher=ISO/IEC JTC1/SC22/WG21 – The C++ Standards Committee|accessdate=2009-10-03|archive-date=2009-09-26|archive-url=https://web.archive.org/web/20090926233304/http://www.open-std.org/JTC1/SC22/WG21/docs/cwg_active.html|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cd1_comments&amp;quot;&amp;gt;{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2939.html|title=C++ CD1 Comment Status|last=Miller|first=William M.|date=2009-08-03|publisher=ISO/IEC JTC1/SC22/WG21 – The C++ Standards Committee|accessdate=2009-10-03|archive-date=2009-10-28|archive-url=https://web.archive.org/web/20091028080142/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2939.html|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;n2115&amp;quot;&amp;gt;{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2115.pdf|title=Decltype (revision 6): proposed wording|last=Dos Reis|first=Gabriel|coauthors=Järvi, Jaakko; Stroustrup, Bjarne|date=2006-11-05|publisher=ISO/IEC JTC1/SC22/WG21 – The C++ Standards Committee|accessdate=2009-10-03|archive-date=2020-09-29|archive-url=https://web.archive.org/web/20200929171709/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2115.pdf|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;n3084&amp;quot;&amp;gt;{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3084.html|title=C++ Standard Core Language Defect Reports, Revision 69|last=Miller|first=William M.|date=2010-03-29|publisher=ISO/IEC JTC1/SC22/WG21 – The C++ Standards Committee|accessdate=2010-04-10|archive-date=2020-11-13|archive-url=https://web.archive.org/web/20201113163355/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3084.html|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;n3031&amp;quot;&amp;gt;{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3031.pdf|title=Core issues 743 and 950: Additional decltype(...) uses|last=Vandevoorde|first=Daveed|date=2010-02-03|publisher=ISO/IEC JTC1/SC22/WG21 – The C++ Standards Committee|accessdate=2010-04-10|archive-date=2017-01-13|archive-url=https://web.archive.org/web/20170113053544/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3031.pdf|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 外部链接 ==&lt;br /&gt;
*[http://www.stroustrup.com/C++11FAQ.html#decltype 比雅尼·斯特劳斯特鲁普的“C++11 FAQ”中关于decltype的部分]{{Wayback|url=http://www.stroustrup.com/C++11FAQ.html#decltype |date=20181006014513 }}&lt;br /&gt;
&lt;br /&gt;
[[Category:C++]]&lt;/div&gt;</summary>
		<author><name>imported&gt;52-Feb</name></author>
	</entry>
</feed>