《深度探索C++对象模型》读书笔记 最后一记

第6章主要讲述了执行期语意学,主要内容是关于数组的在构建和析构是如何进行的。

第7章主要讲述了有关Template的相关内容。

这两章内容散见于《Effective C++》、《More Effective C++》、《C++Primer》《C++Templates中 文版》等书籍,如果感兴趣请阅读对应的书籍。

本读书笔记主要想谈一下对语意的理解。

本人认为C++程序设计可以简单分为三个层次:语法层、语言语意层(就像《深度探索C++对象模型》所讲的语意)、程序语意层。

语法层是很容易理解的,也很容易学习的。讲解C++语法的书籍很多,随便找基本多学学就可以学会 。但是达到该层次只是达到了一个很低级的层次。例如我想保存五个整数,那么我写下int n1,n2,n3 ,n4,n5;是可以的,但是如果这么写,很有可能在以后的处理过程中会很麻烦;虽然上述语句完全符 合C++语法要求。

实际上如果想很好地掌握C++语法也不是很容易的,需要深入阅读书籍和不断的实践。即使很好地掌握了C++大部分语法也只是刚刚走完万里长征的第一步。

比语法层高一级的是语言语意层。语言语意层是我自己创造的名次,那么什么是语言语意层呢?一个很好的解释就是写下的语句在符合语法之后根据该语言的具体实现也很好地符合了语意。如果说《C++ Primer》是讲C++语法的好书的话,那么《深度探索C++对象模型》就是很好的讲解C++语言语意的书籍。语言语意可以简单理解为我们写的语句真实的语意。

例如我可以写下

class Test
{
public:
    Test(wstring) : m_strName()//A
    {
          m_strName = _T(“”);   //B
    }

private:
    Wstring m_strName;
}

此时我们初始化m_strName的方法有两种,方法A或B.虽然A和B都符合语法的要求,但是那个更符合语 意的要求呢?当然是A语句了(具体原因参见深度探索C++对象模型》一书),因此根据语意我们应该用A 语句。

本文章中所述的语言语意层就是指该内容,就是C++语言的语意。要想达到这个层次比达到上各层次 需要付出更多的努力和实践。虽然这个层次不比上个层次难以达到,但是要想真的达到这个层次也还是 很容易的,只要努力就可以达到。

可以这样理解程序语意学:在符合语法和语言语意层的要求之后我们现在实现了某功能,但是我们所 采用的方法是否可修改性、可理解性、时间效率、空间效率等等的要求。如果说语言语意学是从语句或 者单个类的角度理解的话,那么程序语意学是从整个程序的高度去理解我们写的程序是否让人感到优美、优雅;是否能让人感到成就、感到满足。也就是说我们采用一个很好的方案很好地解决了这个问题。

如果想达到这个层次就需要不懈的努力和良好的悟性了。例如需要对一个大型数组进行排序那么采用冒泡的方法一般说来没有采用快速排序的好;再例如需要有一个可以保存某类型的数组,而该类型不确定,那么采用保存void*指针和强制类型转换的方法肯定不如采用类似STL中vector的方案好。以上两个例子简单对于了一下不同程序语意的差别。

山在远方,路在脚下,祝我们都能达到梦想的山顶。

时间: 2024-08-03 03:46:38

《深度探索C++对象模型》读书笔记 最后一记的相关文章

深度探索C++对象模型(3)

介绍 多态是一种威力强大的设计机制,允许你继承一个抽象的public接口之后,封装相关的类型,需要付出的代价就是额外的间接性--不论是在内存的获得,或是在类的决断上,C++通过class的pointer和references来支持多态,这种程序风格就称为"面向对象". 大家好,雷神关于<深度探索C++对象模型>笔记终于又和大家见面了,速度慢的真是可以.好了不浪费时间了,直接进入主题. 这篇笔记主要解决了几个常常被人问到的问题. 1.C++支持多重继承吗? 2.结构和类的区别

《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记

来源:http://dsqiu.iteye.com/blog/1669614 之前一直对C++内部的原理的完全空白,然后找到<Inside The C++ Object Model>这本书看了下, 感觉收获很大,因为书写得比较早,有些知识应该要更新,但是还是值得好好研读,由于该书的内容给人比较散的感觉,所以一直想找个时间整理一下,遂成此文,虽然都是抄书上的,但是却让我有了温故而知新的觉悟,附近里有三个好资料,一并共享了!2012年9月2日凌晨 4:31 谢谢 张雨生的歌声的相伴!   <

深度探索C++对象模型(7)

关于<深度探索C++对象模型>停顿了半个月,今天继续啃这个骨头,我的学习进入了第四章,函数的语意学.先做个复习C++支持三种成员函数:静态.虚.和非静态.每一种函数的调用方式都不同,当然他们的作用也会有区别,一般来说我们只要掌握根据我们的需要正确的使用这三种类型的成员函数便可以了,至于内部是如何运做的我们可以不知.但是<深度探索C++对象模型>正是让我们对这些不知道的东西进行深度探索的一本书.通过前面的学习,我想我知道了一些以前不知道的东西,但是感觉并没有提高多少,也许是我对此书的

深度探索C++对象模型(2)

史列因:我刚看了你写的"深度探索C++对象模型(1)",感觉很不错.不过我有一个建议:你说"谁知第一章便如此的难以消化,已经反复读了3遍,还是有些夹生"是很自然的.第一章是一个总览,如果你能全看懂,后面的就没什么看的必要了.第一章的内容后面都有详细介绍,开始只要有个大概印象就可以了.这本书中很多内容都是前后重复的.我建议你先不管看懂看不懂,只管向后看,之后再从头看几遍,那样效果好得多. 我想史列因说的应该是一种非常好的阅读方式,类似<深度探索C++对象模型&g

深度探索C++对象模型(4)

雷神跌跌撞撞的读完了<深度探索C++对象模型>的第一章,虽然还是有些疑惑,但是已经感到收获很大.按照朋友的说法,第一章是一个概括的介绍,具体的细节会在以后的章节阐述,如果没有通读本书,第一章还是比较不容易理解的.雷神听过之后信心倍增,也不在有初看此书时的"世界末日"的感觉了(在第2篇雷神感到学了近一年的C++,居然水平如此之差),并且通过自己的努力,还是摸到了些门道,所以让我们继续快乐的出发,踏上深度探索C++对象模型的旅程.记住我们在第一篇的小文<坚持不懈,直到成功

c++-深度探索C++对象模型 虚函数表指针问题

问题描述 深度探索C++对象模型 虚函数表指针问题 <深度探索C++对象模型>中文版116页, "某些编译器设计了一种优化技术,只要第二个(或后继)base class声明了一个virtual function,而第一个base class没有,就把多个base classes的顺序调换.这样可以在derived class object中少产生一个vptr" vptr是如何减少的,想不明白,跪求解答 解决方案 没有虚函数的基类就不需要vptr了 解决方案二: 这个涉及虚表

《深度探索C++对象模型》读书笔记(1)

在C++中,有两种class data members:static和nonstatic,以及三种class member functions: static.nonstatic和virtual.已知下面这个class Point声明: class Point ...{ public: Point(float xval); virtual ~Point(); float x() const; static int PointCount(); protected: virtual ostream&

《深度探索C++对象模型》读书笔记(7)

***Template的"具现"行为*** template class中的任何member都只能通过template class的某个实体来存取或操作. Point<float>::Status s; // ok Point::Status s; // error 如果我们定义一个指针,指向特定的实体,像这样: Point<float> *ptr = 0; 由于这是一个指向class object的指针,本身并不是一个class object,编译器不需要知道

《深度探索C++对象模型》读书笔记(6)

***对象的构造和解构*** 一般而言,我们会把object尽可能放置在使用它的那个程序区段附近,这样做可以节省不必要的对象 产生操作和销毁操作. ***全局对象*** 全局对象的静态初始化策略包括以下几个步骤: (1)为每一个需要静态初始化的对象产生一个_sti_--()函数,内含必要的 constructor调用操作或inline expansions: (2)为每一个需要静态的内存释放操作的对象产生一个_std_--()函数,内含必要 的destructor调用操作或inline expa