Updated format of referenced text.

This commit is contained in:
Ye WU 2015-11-24 21:23:37 -08:00
parent 0fff42ce4b
commit 24fbf47ad3

View File

@ -1334,21 +1334,30 @@ template <typename T> foo(T& v0, C& v1){
因此在模板定义的地方进行语义分析,并不能**完全**得出代码是正确或者错误的结论只有到了实例化阶段确定了模版参数的类型后才知道这段代码正确与否。令人高兴的是在这一问题上我们和C++标准委员会的见地一致说明我们的C++水平已经和Herb Sutter不分伯仲了。既然我们和Herb Sutter水平差不多那凭什么人家就吃香喝辣下面我们来选几条标准看看服不服 因此在模板定义的地方进行语义分析,并不能**完全**得出代码是正确或者错误的结论只有到了实例化阶段确定了模版参数的类型后才知道这段代码正确与否。令人高兴的是在这一问题上我们和C++标准委员会的见地一致说明我们的C++水平已经和Herb Sutter不分伯仲了。既然我们和Herb Sutter水平差不多那凭什么人家就吃香喝辣下面我们来选几条标准看看服不服
> ###14.6 名称解析Name resolution > **14.6 名称解析Name resolution**
> **1)** 模板定义中能够出现以下三类名称: > **1)** 模板定义中能够出现以下三类名称:
> —— 模板名称、或模板实现中所定义的名称; > * 模板名称、或模板实现中所定义的名称;
> —— 和模板参数有关的名称; > * 和模板参数有关的名称;
> —— 模板定义所在的定义域内能看到的名称。 > * 模板定义所在的定义域内能看到的名称。
> … > …
> **9)** … 如果名字查找和模板参数有关,那么查找会延期到模板参数全都确定的时候。 … > **9)** … 如果名字查找和模板参数有关,那么查找会延期到模板参数全都确定的时候。 …
> **10)** 如果(模板定义内出现的)名字和模板参数无关,那么在模板定义处,就应该找得到这个名字的声明。… > **10)** 如果(模板定义内出现的)名字和模板参数无关,那么在模板定义处,就应该找得到这个名字的声明。…
> ###14.6.2 依赖性名称Dependent names
> **1)** …(模板定义中的)表达式和类型可能会依赖于模板参数,并且模板参数会影响到名称查找的作用域 … 如果表达式中有操作数依赖于模板参数,那么整个表达式都依赖于模板参数,名称查找延期到**模板实例化时**进行。并且定义时和实例化时的上下文都会参与名称查找。(依赖性)表达式可以分为类型依赖(类型指模板参数的类型)或值依赖。 > **14.6.2 依赖性名称Dependent names**
> ####14.6.2.2 **类型依赖的表达式**
> **1)** …(模板定义中的)表达式和类型可能会依赖于模板参数,并且模板参数会影响到名称查找的作用域 … 如果表达式中有操作数依赖于模板参数,那么整个表达式都依赖于模板参数,名称查找延期到**模板实例化时**进行。并且定义时和实例化时的上下文都会参与名称查找。(依赖性)表达式可以分为类型依赖(类型指模板参数的类型)或值依赖。
> **14.6.2.2 类型依赖的表达式**
> **2)** 如果成员函数所属的类型是和模板参数有关的,那么这个成员函数中的`this`就认为是类型依赖的。 > **2)** 如果成员函数所属的类型是和模板参数有关的,那么这个成员函数中的`this`就认为是类型依赖的。
> ###14.6.3 非依赖性名称Non-dependent names
> **14.6.3 非依赖性名称Non-dependent names**
> **1)** 非依赖性名称在**模板定义**时使用通常的名称查找规则进行名称查找。 > **1)** 非依赖性名称在**模板定义**时使用通常的名称查找规则进行名称查找。
[Working Draft: Standard of Programming Language C++, N3337][1] [Working Draft: Standard of Programming Language C++, N3337][1]