C++对象模型——执行期语意学(第六章)
来源:互联网 发布:软件测评师 编辑:程序博客网 时间:2024/06/01 10:51
第6章 执行期语意学 (Runtime Semantics)
想象一下有下面这个简单的式子:if (yy == xx.getValue()) // ...其中xx和yy定义为:
X xx;Y yy;class Y的定义为:
class Y {public: Y(); ~Y(); bool operator==(const Y &) const;};class X定义为:
class X {public: X(); ~X(); operator Y() const; // conversion运算符 X getValue();};首先决定equality运算符所参考到的真正实体.在这个例子中,它将被决议(resolved)为"被overloaded的Y成员实体".下面是该式子的第一次转换:
// resolution of intended operatorif (yy.operator==(xx.getValue())) // ...Y的equality运算符需要一个类型为Y的参数,然而getValue()传回的确实一个类型为X的object,若非有什么方法可以把一个X object转换为一个Y object,那么这个式子就算错.本例中X提供一个conversion,把一个X object转换为一个Y object.它必须施行于getValue()的返回值上.下面是该式子的第二次转换:
// conversion of getValue()'s return valueif (yy.operator==(xx.getValue().operator Y())) // ...到目前为止所发生的一切都是编译器根据 class 的隐含语意,对程序代码所做的"增胖"操作.如果需要,也可以明确地写出那样的式子.
虽然程序的语意是正确的,但其教育性却尚不能说是正确的.接下来必须产生一个临时对象,用来放置函数调用所传回的值:
产生一个临时的 class X object,放置getValue()的返回值:
X temp1 = xx.getValue();产生一个临时的 class Y object,放置operator Y()的返回值:
Y temp2 = temp1.operator Y();产生一个临时的 int object,放置equality运算符的返回值:
int temp3 = yy.operator==(temp2);最后,适当的destructor将被施行于每一个临时性的 class object上,这导致式子被转换为以下形式:
// C++伪代码:以下是条件句 if (yy == xx.getValue()) ... 的转换{ X temp1 = xx.getValue(); Y temp2 = temp1.operator Y(); int temp3 = yy.operator==(temp2); if (temp3) // ... temp2.Y::~Y(); temp1.X::~X();}似乎不少,这是C++的一件困难事情:不太容易从程序代码看出表达式的复杂度.本章看一看执行期所发生的一些转换.
0 0
- C++对象模型——执行期语意学(第六章)
- C++对象模型 第六章 执行期语意学
- 深度探索C++对象模型读书笔记-第六章执行期语意学
- 深度探索C++对象模型复习和学习 第六章:执行期语意学
- 《深度探索C++对象模型》读书笔记第六章:执行期语意学
- 《深度探索C++对象模型》第六章 执行期语意学
- 《深入探索C++对象模型》第六章 执行语意学
- 深入探索C++对象模型 之 执行期语意学
- 深度探索C++对象模型:6.执行期语意学
- 深度探索C++对象模型(六) 执行期语意学
- 深入c++对象模型之执行期语意学
- 【C++】深度探索C++对象模型之执行期语意学
- 【深度探索C++对象模型读书笔记】【第6章】执行期语意学
- 执行期语意学
- C++对象模型——Data 语意学(第三章)
- C++对象模型——解构语意学(第五章)
- 《深度探索C++对象模型》读书笔记之执行期语意学
- 《深度探索C++对象模型》--5 构造析构拷贝 && 6 执行期语意学
- 博客迁移至博客园。用户:Jabnih
- POJ 1061 不定方程
- 每天一个Linux命令-15(cut)
- Android Activity的生命周期
- C语言-5
- C++对象模型——执行期语意学(第六章)
- 系统函数C字符串的实现(9):strrchr
- SQLite 日期类型
- 素数的Miller_Rabbin测试
- Git 学习之--安装配置GitHub
- TCP协议中的三次握手和四次挥手(图解)
- 保护眼睛——f.lux(linux,windows,mac 均可)
- pat(A) 1007. Maximum Subsequence Sum(和最大子段)
- Linux进程调用原理