Inside the C++ Object Model:7、站在对象模型的尖端

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_30534935/article/details/102672008

7.1 Template


它甚至被使用于一项所谓的 template metaroprograms 技术:
class expression templates 将在编译时期而非执行期被评估,因而带来重大的效率提升。


Template 的 “实例化” 行为


Template 的错误报告


Template 中的名称决议法


Member Function 的实例化行为



7.2 异常处理


为了维护执行速度,编译器可以在编译时期建立起用于支持的数据结构。这会使程序的大小发生膨胀,但编译器可以几乎忽略这些结构,直到有个 exception 被抛出来。

为了维护程序大小,编译器可以在执行期建立起用于支持的数据结构,这会影响程序的执行速度,但意味着编译器只有必要的时候才建立那些数据结构。


Exception Handling 快速检阅

C++ 的 exception handling 由三个主要的语汇组件构成:
一个 throw 子句、一个或多个 catch 子句、一个 try 区段。


对 Exception Handling 的支持

当一个 exception 发生时,编译系统必须完成以下事情:

检查发生 throw 操作的函数。

决定 throw 操作是否发生在 try 区段。

若是,编译系统必须把 exception type 拿来和每一个 catch 子句进行比较。

如果比较后吻合,流程控制应该交到 catch 子句中。

如果 throw 的发生并不在 try 区段中,或没有一个 catch 子句吻合,那么系统必须 (a) 摧毁所有 active local objects,(b) 从堆栈中将目前的函数 “unwind” 掉,© 进行到程序堆栈的下一个函数中去,然后重复上述步骤 2~5。



7.3 执行期类型识别


Type-Safe Downcast


Type-Safe Dynamic Cast


Reference 并不是 Pointers


Typeid 运算符



7.4 效率有了,弹性呢?


动态共享函数库


共享内存


猜你喜欢

转载自blog.csdn.net/qq_30534935/article/details/102672008