第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的方案好。以上两个例子简单对于了一下不同程序语意的差别。
山在远方,路在脚下,祝我们都能达到梦想的山顶。