深入探索c++对象模型之站在对象模型的尖端
2017-03-19 18:22
211 查看
1.Template
对于member function 的“实体”化,只有在member function被使用的时候,c++standard 才要求它们被“具现”出来。
1>template的错误报告
所有与类型有关的检验,如果牵涉到template参数,都必须延迟到真正的具现操作发生,才得为之。
nonmember和member template function在具现行为发生之前也一样没有做到完全的类型检验。
2>Template中的名称决议方式
Template之中,对于一个nonmember name 的决议结果是根据这个name的使用是否与“用以具现出该template的参数类型”有关而决定的。如果其使用互不相关,那么就以“scope of the template declaration”来决定name。如果其使用有关联,那么就以“scope of the template instantiation”来决定name。
例如:第一种情况
//scope of the template definition
extern double foo(double);
template<class type>
calss ScopeRules{
public:
void invariant(){ _member = foo(_val); }
type type_dependent(){ return foo(_member) ; }
private:
int _val;
type _member;
}
第二种情况:
//scope of the template instantiation
extern int foo(int);
scopeRules<int> sro;
sro.invariant();//调用的是double foo(double);
sro.type_dependent();//调用的是 int foo(int);
2.异常的处理
1>Exception Handing 快速检阅。
C++的exception handing 由三个主要的语汇组件构成:
(1)一个throw子句。他在程序某处发出一个exception。被丢出来的exception可以是内建类型,也可以是使用者自定义类型。
(2)一个或多个catch语句。每一个catch子句都有一个exception handler。它用来表示说,这个子句准备处理某种类型的exception,并且在封闭的大括号区段中提供实际的处理程序。
(3)一个try区段,它被围绕以一系列的叙述句,这些叙述句可能引发catch子句的作用。
当一个exception被丢出时,控制权会从函数调用中被释放出来,并寻找一个吻合的catch子句。如果没有吻合者,那么默认的处理例程terminate()会被调用。当控制权被放弃后,堆栈中的每一个函数调用也就被 推离。这个程序称为unwinding the stack。在每一个函数被推离函数之前,函数的local class object 的destructor会被调用。
对于member function 的“实体”化,只有在member function被使用的时候,c++standard 才要求它们被“具现”出来。
1>template的错误报告
所有与类型有关的检验,如果牵涉到template参数,都必须延迟到真正的具现操作发生,才得为之。
nonmember和member template function在具现行为发生之前也一样没有做到完全的类型检验。
2>Template中的名称决议方式
Template之中,对于一个nonmember name 的决议结果是根据这个name的使用是否与“用以具现出该template的参数类型”有关而决定的。如果其使用互不相关,那么就以“scope of the template declaration”来决定name。如果其使用有关联,那么就以“scope of the template instantiation”来决定name。
例如:第一种情况
//scope of the template definition
extern double foo(double);
template<class type>
calss ScopeRules{
public:
void invariant(){ _member = foo(_val); }
type type_dependent(){ return foo(_member) ; }
private:
int _val;
type _member;
}
第二种情况:
//scope of the template instantiation
extern int foo(int);
scopeRules<int> sro;
sro.invariant();//调用的是double foo(double);
sro.type_dependent();//调用的是 int foo(int);
2.异常的处理
1>Exception Handing 快速检阅。
C++的exception handing 由三个主要的语汇组件构成:
(1)一个throw子句。他在程序某处发出一个exception。被丢出来的exception可以是内建类型,也可以是使用者自定义类型。
(2)一个或多个catch语句。每一个catch子句都有一个exception handler。它用来表示说,这个子句准备处理某种类型的exception,并且在封闭的大括号区段中提供实际的处理程序。
(3)一个try区段,它被围绕以一系列的叙述句,这些叙述句可能引发catch子句的作用。
当一个exception被丢出时,控制权会从函数调用中被释放出来,并寻找一个吻合的catch子句。如果没有吻合者,那么默认的处理例程terminate()会被调用。当控制权被放弃后,堆栈中的每一个函数调用也就被 推离。这个程序称为unwinding the stack。在每一个函数被推离函数之前,函数的local class object 的destructor会被调用。
相关文章推荐
- [读书笔记] 深入探索C++对象模型-第七章-站在对象模型的尖端(上)
- 深入探索C++对象模型之七 --- 站在对象模型的尖端
- [读书笔记] 深入探索C++对象模型-第七章-站在对象模型的尖端(下)
- [读书笔记] 深入探索C++对象模型-第七章-站在对象模型的尖端(中)
- 深入探索C++对象模型 第七章 站在对象模型的尖端
- 深入探索C++对象模型笔记之三 —— 构造函数语意学 (Default Constructor的建构操作)
- 《深入探索C++对象模型》第六章 执行语意学
- 《深入探索C++对象模型》读后感
- 深入探索C++对象模型笔记一 —— 关于对象(上)
- 【深入探索c++对象模型】c++中构造函数调用虚函数的讨论
- 深入探讨C++对象模型 之 站在对象模型的尖端
- 深入探索C++对象模型 第六章 执行语义学
- 【深入探索c++对象模型】抽象类和纯虚函数的理解
- 深入探索C++对象模型 第一章 关于对象
- 深入探索C++对象模型(6)
- 深入探索C++对象模型笔记之五 —— 构造函数语意学 (成员们的初始化队伍 Member Initialization List)
- 深入探索C++对象模型--详解深拷贝与浅拷贝以及拷贝构造的建构
- 深入探索C++对象模型(1)
- 深入探索C++对象模型(1)
- 【深入探索c++对象模型】类对象所需内存大小讨论续写