222 lines
30 KiB
HTML
222 lines
30 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
|
|
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<title>有限定的名字查找</title>
|
|
<link rel="stylesheet" href="ext.css" />
|
|
<link rel="stylesheet" href="site_modules.css" />
|
|
</head>
|
|
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_language_qualified_lookup skin-cppreference2 action-view cpp-navbar">
|
|
<div id="cpp-content-base">
|
|
<div id="content"><a id="top"></a>
|
|
<h1 id="firstHeading" class="firstHeading">有限定的名字查找</h1>
|
|
<div id="bodyContent">
|
|
<div id="contentSub"><span class="subpages">< <a href="cpp.html">cpp</a>‎ | <a href="cpp-language.html">language</a></span></div>
|
|
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
|
|
<p>出现在作用域解析操作符 <code><b>::</b></code> 右边的名字是<i>限定</i>名(参阅<a href="cpp-language-identifiers.html#.E6.9C.89.E9.99.90.E5.AE.9A.E7.9A.84.E6.A0.87.E8.AF.86.E7.AC.A6">有限定的标识符</a>)。 限定名可能代表的是:</p>
|
|
<ul>
|
|
<li>类的成员(包括静态和非静态函数、类型和模板等)</li>
|
|
<li>命名空间的成员(包括其它的命名空间)</li>
|
|
<li>枚举项</li>
|
|
</ul>
|
|
<p>若 <code><b>::</b></code> 左边为空,则查找过程仅会考虑全局命名空间作用域中作出(或通过 <a href="cpp-language-namespace.html">using 声明</a>引入到全局命名空间中)的声明。这使得即使被局部声明隐藏的名字也能够被访问:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="co2">#include <iostream></span>
|
|
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
|
|
<span class="kw1">struct</span> std<span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> <span class="st0">"fail<span class="es1">\n</span>"</span><span class="sy4">;</span> <span class="co1">// 错误:对 'std' 的无限定查找找到 struct</span>
|
|
<span class="sy4">::</span><a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> <span class="st0">"ok<span class="es1">\n</span>"</span><span class="sy4">;</span> <span class="co1">// 正确: ::std 找到命名空间 std</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<p>只有完成对 <code><b>::</b></code> 左边的名字的查找(除非左边所用的是 <a href="cpp-language-decltype.html">decltype</a> 表达式或左边为空),才能对其右边的名字进行名字查找。该左侧查找可以是有限定或无限定的,取决于这个名字左边是否有另一个 <code><b>::</b></code>,但其仅考虑命名空间、类类型、枚举和能特化为类型的模板:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">struct</span> A <span class="br0">{</span>
|
|
<span class="kw4">static</span> <span class="kw4">int</span> n<span class="sy4">;</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
|
|
<span class="kw4">int</span> A<span class="sy4">;</span>
|
|
A<span class="sy4">::</span><span class="me2">n</span> <span class="sy1">=</span> <span class="nu0">42</span><span class="sy4">;</span> <span class="co1">// 正确:对 :: 左边的 A 的无限定查找忽略变量</span>
|
|
A b<span class="sy4">;</span> <span class="co1">// 错误:对 A 的无限定查找找到了变量 A</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<p>当限定名为<a href="cpp-language-declarations.html">声明符</a>时,对同一声明符中随该限定名之后,而非其之前的名字的<a href="cpp-language-unqualified_lookup.html">无限定查找</a>,是在成员的所在类或命名空间的作用域中进行的:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">class</span> X <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">int</span> number <span class="sy1">=</span> <span class="nu0">100</span><span class="sy4">;</span>
|
|
<span class="kw1">struct</span> C <span class="br0">{</span>
|
|
<span class="kw1">class</span> X <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="kw4">static</span> <span class="kw4">const</span> <span class="kw4">int</span> number <span class="sy1">=</span> <span class="nu0">50</span><span class="sy4">;</span>
|
|
<span class="kw4">static</span> X arr<span class="br0">[</span>number<span class="br0">]</span><span class="sy4">;</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
X C<span class="sy4">::</span><span class="me2">arr</span><span class="br0">[</span>number<span class="br0">]</span>, brr<span class="br0">[</span>number<span class="br0">]</span><span class="sy4">;</span> <span class="co1">// 错误:对 X 的查找找到 ::X 而不是 C::X</span>
|
|
C<span class="sy4">::</span><span class="me2">X</span> C<span class="sy4">::</span><span class="me2">arr</span><span class="br0">[</span>number<span class="br0">]</span>, brr<span class="br0">[</span>number<span class="br0">]</span><span class="sy4">;</span> <span class="co1">// OK : arr 的大小是 50 , brr 的大小是 100</span></pre></div>
|
|
</div>
|
|
<p>若 <code><b>::</b></code> 后跟字符 <code><b>~</b></code> 再跟着一个标识符(也就是说指定了析构函数或伪析构函数),那么该标识符将在与 <code><b>::</b></code> 左边的名字相同的作用域中查找。</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">struct</span> C <span class="br0">{</span> <span class="kw1">typedef</span> <span class="kw4">int</span> I<span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="kw1">typedef</span> <span class="kw4">int</span> I1, I2<span class="sy4">;</span>
|
|
<span class="kw4">extern</span> <span class="kw4">int</span> <span class="sy2">*</span>p, <span class="sy2">*</span>q<span class="sy4">;</span>
|
|
<span class="kw1">struct</span> A <span class="br0">{</span> ~A<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="kw1">typedef</span> A AB<span class="sy4">;</span>
|
|
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
|
|
p<span class="sy2">-</span><span class="sy1">></span>C<span class="sy4">::</span><span class="me2">I</span><span class="sy4">::</span>~I<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// ~ 之后的名字 I 在 :: 前面的 I 的同一个作用域中查找</span>
|
|
<span class="co1">//(也就是说,在 C 的作用域中查找,因此查找结果是 C::I )</span>
|
|
q<span class="sy2">-</span><span class="sy1">></span>I1<span class="sy4">::</span>~I2<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// 名字 I2 在 I1 的同一个作用域中查找,</span>
|
|
<span class="co1">// 也就是说从当前的作用域中查找,因此查找结果是 ::I2</span>
|
|
AB x<span class="sy4">;</span>
|
|
x.<span class="me1">AB</span><span class="sy4">::</span>~AB<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// ~ 之后的名字 AB 在 :: 前面的 AB 的同一个作用域中查找</span>
|
|
<span class="co1">// 也就是说从当前的作用域中查找,因此查找结果是 ::AB</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<table class="t-rev-begin">
|
|
<tr class="t-rev t-since-cxx11">
|
|
<td>
|
|
<h4><span class="mw-headline" id=".E6.9E.9A.E4.B8.BE.E9.A1.B9">枚举项</span></h4>
|
|
<p>若对左边的名字的查找结果是<a href="cpp-language-enum.html">枚举</a>(无论是有作用域还是无作用域),右边名字的查找结果必须是属于该枚举的一个枚举项,否则程序非良构。</p>
|
|
</td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11 起)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h4><span class="mw-headline" id=".E7.B1.BB.E6.88.90.E5.91.98">类成员</span></h4>
|
|
<p>若对左边的名字的查找结果是某个类、结构体或联合体的名字,则 <code><b>::</b></code> 右边的名字在该类、结构体或联合体的作用域中进行查找(因此可能找到该类或其基类的成员的声明),但有以下例外情况:</p>
|
|
<ul>
|
|
<li>析构函数按如上所述进行查找(即在 <code><b>::</b></code> 左边的名字的作用域中查找)</li>
|
|
<li><a href="cpp-language-cast_operator.html">用户定义转换</a>函数名中的转换类型标识首先在该类类型的作用域中查找。若未找到,则在当前作用域中查找该名字。</li>
|
|
<li>模板实参中使用的名字,在当前作用域中查找(而非在模板名的作用域中查找)</li>
|
|
<li><a href="cpp-language-namespace.html">using 声明</a>中的名字,还考虑在当前作用域中声明的变量、数据成员、函数或枚举项所隐藏的类或枚举名</li>
|
|
</ul>
|
|
<table class="metadata plainlinks ambox mbox-small-left ambox-notice" style="">
|
|
<tr>
|
|
<td class="mbox-empty-cell"></td>
|
|
<td class="mbox-text" style="">本节未完成<br />
|
|
原因:上述内容的小示例</td>
|
|
</tr>
|
|
</table>
|
|
<p>若 <code><b>::</b></code> 右边所指名的是和其左边相同的类,则右边的名字表示的是该类的<a href="cpp-language-constructor.html">构造函数</a>。这种限定名仅能用在构造函数的声明以及引入<a href="cpp-language-using_declaration.html#.E7.BB.A7.E6.89.BF.E6.9E.84.E9.80.A0.E5.87.BD.E6.95.B0">继承构造函数</a>的 <a href="cpp-language-using_declaration.html">using 声明</a>中。在所有忽略函数名的查找过程中(即在查找 <code><b>::</b></code> 左边的名字,或查找<a href="cpp-language-elaborated_type_specifier.html">详述类型说明符</a>或<a href="cpp-language-derived_class.html">基类说明符</a>中的名字时),则将同样的语法解释成注入类名:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">struct</span> A <span class="br0">{</span> A<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="kw1">struct</span> B <span class="sy4">:</span> A <span class="br0">{</span> B<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
|
|
A<span class="sy4">::</span><span class="me2">A</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span> <span class="br0">}</span> <span class="co1">// A::A 指定的是构造函数,用于声明</span>
|
|
B<span class="sy4">::</span><span class="me2">B</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span> <span class="br0">}</span> <span class="co1">// B::B 指定的是构造函数,用于声明</span>
|
|
B<span class="sy4">::</span><span class="me2">A</span> ba<span class="sy4">;</span> <span class="co1">// B::A(在 B 的作用域中查找)指定的是类型 A</span>
|
|
A<span class="sy4">::</span><span class="me2">A</span> a<span class="sy4">;</span> <span class="co1">// 错误:A::A 不是类型</span>
|
|
|
|
<span class="kw1">struct</span> A<span class="sy4">::</span><span class="me2">A</span> a2<span class="sy4">;</span> <span class="co1">// 正确:详述类型说明符中的查找是忽略函数的,</span>
|
|
<span class="co1">// 因此 A::A 在 A 的作用域中查找,于是指定的是类 A</span>
|
|
<span class="co1">// (亦即其注入类名)</span></pre></div>
|
|
</div>
|
|
<p>有限定名字查找可用来访问被嵌套声明或被派生类隐藏了的类成员。对有限定的成员函数的调用将不得是虚调用:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">struct</span> B <span class="br0">{</span> <span class="kw1">virtual</span> <span class="kw4">void</span> foo<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="kw1">struct</span> D <span class="sy4">:</span> B <span class="br0">{</span> <span class="kw4">void</span> foo<span class="br0">(</span><span class="br0">)</span> override<span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
|
|
<span class="br0">{</span>
|
|
D x<span class="sy4">;</span>
|
|
B<span class="sy3">&</span> b <span class="sy1">=</span> x<span class="sy4">;</span>
|
|
b.<span class="me1">foo</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// 调用 D::foo(虚调用派发)</span>
|
|
b.<span class="me1">B</span><span class="sy4">::</span><span class="me2">foo</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// 调用 B::foo(静态调用派发)</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E5.91.BD.E5.90.8D.E7.A9.BA.E9.97.B4.E7.9A.84.E6.88.90.E5.91.98">命名空间的成员</span></h4>
|
|
<p>若 <code><b>::</b></code> 左边的名字代表的是命名空间,或者 <code><b>::</b></code> 左边为空(这种情况代表全局命名空间),那么 <code><b>::</b></code> 右边的名字就在这个命名空间的作用域中进行查找,但有以下例外:</p>
|
|
<ul>
|
|
<li>在模板实参中使用的名字在当前作用域中查找</li>
|
|
</ul>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">namespace</span> N <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">typename</span> T<span class="sy1">></span> <span class="kw1">struct</span> foo <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="kw1">struct</span> X <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
N<span class="sy4">::</span><span class="me2">foo</span><span class="sy1"><</span>X<span class="sy1">></span> x<span class="sy4">;</span> <span class="co1">// 错误:X 查找结果为 ::X 而不是 N::X</span></pre></div>
|
|
</div>
|
|
<p>在<a href="cpp-language-namespace.html">命名空间</a> <code>N</code> 中进行有限定查找时,首先要考虑处于 <code>N</code> 之中的所有声明,以及处于 <code>N</code> 的<a href="cpp-language-namespace.html#.E5.86.85.E8.81.94.E5.91.BD.E5.90.8D.E7.A9.BA.E9.97.B4">内联命名空间成员</a>(并且传递性地包括它们的内联命名空间成员)之中的所有声明。如果这个集合中没有找到任何声明,则再考虑在 <code>N</code> 和 <code>N</code> 的所有传递性的内联命名空间成员中发现的所有<a href="cpp-language-namespace.html#using_.E6.8C.87.E4.BB.A4">using 指令</a>所指名的命名空间之中的声明。这条规则是递归实施的:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw4">int</span> x<span class="sy4">;</span>
|
|
<span class="kw1">namespace</span> Y <span class="br0">{</span>
|
|
<span class="kw4">void</span> f<span class="br0">(</span><span class="kw4">float</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw4">void</span> h<span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="kw1">namespace</span> Z <span class="br0">{</span>
|
|
<span class="kw4">void</span> h<span class="br0">(</span><span class="kw4">double</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="kw1">namespace</span> A <span class="br0">{</span>
|
|
<span class="kw1">using</span> <span class="kw1">namespace</span> Y<span class="sy4">;</span>
|
|
<span class="kw4">void</span> f<span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw4">void</span> g<span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw4">int</span> i<span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="kw1">namespace</span> B <span class="br0">{</span>
|
|
<span class="kw1">using</span> <span class="kw1">namespace</span> Z<span class="sy4">;</span>
|
|
<span class="kw4">void</span> f<span class="br0">(</span><span class="kw4">char</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw4">int</span> i<span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="kw1">namespace</span> AB <span class="br0">{</span>
|
|
<span class="kw1">using</span> <span class="kw1">namespace</span> A<span class="sy4">;</span>
|
|
<span class="kw1">using</span> <span class="kw1">namespace</span> B<span class="sy4">;</span>
|
|
<span class="kw4">void</span> g<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="kw4">void</span> h<span class="br0">(</span><span class="br0">)</span>
|
|
<span class="br0">{</span>
|
|
AB<span class="sy4">::</span><span class="me2">g</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// 在 AB 中查找,找到了 AB::g 并且选择了 AB::g(void)</span>
|
|
<span class="co1">// (并未在 A 和 B 中查找)</span>
|
|
AB<span class="sy4">::</span><span class="me2">f</span><span class="br0">(</span><span class="nu0">1</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// 首先在 AB 中查找,未能找到 f</span>
|
|
<span class="co1">// 然后再在 A 和 B 中查找</span>
|
|
<span class="co1">// 找到了 A::f 和 B::f(但并未在 Y 中查找,因而不考虑 Y::f)</span>
|
|
<span class="co1">// 重载决议选中 A::f(int)</span>
|
|
AB<span class="sy4">::</span><span class="me2">x</span><span class="sy2">++</span><span class="sy4">;</span> <span class="co1">// 首先在 AB 中查找,未能找到 x</span>
|
|
<span class="co1">// 然后再在 A 和 B 中查找。未能找到 x</span>
|
|
<span class="co1">// 然后再在 Y 和 Z 中查找。还是没有 x:这是一个错误</span>
|
|
AB<span class="sy4">::</span><span class="me2">i</span><span class="sy2">++</span><span class="sy4">;</span> <span class="co1">// 在 AB 中查找,未能找到 i</span>
|
|
<span class="co1">// 然后再在 A 和 B 中查找。找到了 A::i 和 B::i:这是一个错误</span>
|
|
AB<span class="sy4">::</span><span class="me2">h</span><span class="br0">(</span><span class="nu16">16.8</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// 首先在 AB 中查找:未能找到 h</span>
|
|
<span class="co1">// 然后再在 A 和 B 中查找。未能找到 h</span>
|
|
<span class="co1">// 然后再在 Y 和 Z 中查找。</span>
|
|
<span class="co1">// 找到了 Y::h 和 Z::h。重载决议选中 Z::h(double)</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<p>同一个声明允许被多次找到:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">namespace</span> A <span class="br0">{</span> <span class="kw4">int</span> a<span class="sy4">;</span> <span class="br0">}</span>
|
|
<span class="kw1">namespace</span> B <span class="br0">{</span> <span class="kw1">using</span> <span class="kw1">namespace</span> A<span class="sy4">;</span> <span class="br0">}</span>
|
|
<span class="kw1">namespace</span> D <span class="br0">{</span> <span class="kw1">using</span> A<span class="sy4">::</span><span class="me2">a</span><span class="sy4">;</span> <span class="br0">}</span>
|
|
<span class="kw1">namespace</span> BD <span class="br0">{</span>
|
|
<span class="kw1">using</span> <span class="kw1">namespace</span> B<span class="sy4">;</span>
|
|
<span class="kw1">using</span> <span class="kw1">namespace</span> D<span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="kw4">void</span> g<span class="br0">(</span><span class="br0">)</span>
|
|
<span class="br0">{</span>
|
|
BD<span class="sy4">::</span><span class="me2">a</span><span class="sy2">++</span><span class="sy4">;</span> <span class="co1">// OK : 通过 B 和 D 找到同一个 A::a</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<table class="metadata plainlinks ambox mbox-small-left ambox-notice" style="">
|
|
<tr>
|
|
<td class="mbox-empty-cell"></td>
|
|
<td class="mbox-text" style="">本节未完成<br />
|
|
原因:N4861 6.5.3.2[namespace.qual] 中的剩余内容,尝试缩短其示例</td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">参阅</span></h3>
|
|
<ul>
|
|
<li><a href="cpp-language-unqualified_lookup.html">无限定名字查找</a></li>
|
|
<li><a href="cpp-language-scope.html">作用域</a></li>
|
|
<li><a href="cpp-language-adl.html">实参依赖查找</a></li>
|
|
<li><a href="cpp-language-function_template.html">模板实参推导</a></li>
|
|
<li><a href="cpp-language-overload_resolution.html">重载决议</a></li>
|
|
</ul>
|
|
</div>
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|