Effective C++ iterm1
条款一
--17/01/14
这个条款主要讲的是怎么对待C++?
将C++作为一种单一语言的做法并不明智,我们应该将C++看作是多种次语言组合成的一个集合。书中概括了其中的次语言有四种:
(1)C
毕竟是从C移植过来的,C++仍然以C为基础。
(2)面向对象C++
这一部分包含了大部分面向对象设计语言的特性,拥有以类为主的编程思路,包含面向对象三大特性:封装,继承,多态。
(3)模板C++
C++的泛型编程部分。Template的威力强大,提供了一种新的编程模式。
(4)STL
实际上是泛型编程的一个优秀的例子,是template程序库。
C++是由这四个次语言组成的联邦政府,这四个部分都要遵守相应的高效编程准则,这就意味着你利用C++进行高效编程要明确自己使用的是C++的哪一部分?
1、内置类型和STL中迭代器和函数对象都是pass by value比pass by reference高效
2、用户自定义类型的话应该使用pass by reference to const更好,不仅可以使得程序效率变高,而且能够避免切割问题。
为什么内置类型反而pass by value效率更高呢?
所谓内置类型就是最基本的类型,例如int,double等,在汇编里面,如果你传的是值的话,就会把相应的值压入栈中,然后在取出来;而如果传的是引用,也就是指针的话,那么就将指针压入栈中,然后再到相应的地址读取出值。pass by reference就是多了后面还要去到相应的位置读取值的过程。原因不仅如此,后面学习条款的时候相信会对这个问题更有进一层的回答。
参考资料: