条款1:视C++为一个语言联邦

  为了理解C++需要记住其主要的次语言,分别为C,Object-Orinted C++(面向对象的C++)、TemplateC++、STL。

  · C语言:是C++的基础。C++的块,语句,预处理器,内置数据类型(C++的基本数据类型),数组,指针等等都来自C语言。有些时候也可以认为C++是C语言的某些高级应用,例如:
C语言预定义:

#define  PI 3.14 

而C++我们多使用:

const double pi=3.14;

  而某些时候我们使用C语言的方式编写C++程序解决问题的话就会有局限:C语言没有模板,没有异常,没有重载……
C语言函数:

int func(int m,int n)
{
    return n+m;
}
int max(int m,int n)
{
    return (m>n)?m:n;
}

  只能使用int类型数据,但是当我们遇到double的话,就要重新编写函数,大大降低了我们的开发效率。
  而使用了C++模板就不一样了,写了模板,往里一套用就可以了。

 1 Template T<typename T,typename S,typename R>
 2 T func(S m, R n)
 3 {
 4 return S+R;
 5 }
 6 Template T<typename T>
 7 T max(T m,T n)
 8 {
 9 return (m>n)?m:n;
10 }
11 #include<iostream>
12 int main(void)
13 {
14 cout<<func<double,double,double>(2.15,3.20)<<endl;
15 cout<<max<double,double>(2.15,3.20)<<endl;
16 return 0;
17 }

· Object-Orinted C++。这部分带C的类(C wtih classes)所诉求的:lasses(包括欧造函数和析构函数)、封装、继承、多态、虚函数(动态绑定)。
· Template上面举了个例子,就不叙述。
· STL是个template程序库。它对容器、迭代器、算法、函数对象有极佳的配合与协调。但是我们使用它的时候要遵守它的规则。

  在编程时从以上四个次语言转换时,如果从效率方面考虑,我们就要使用相对应的策略。
  对于内置类型(c like)而言:传值比(pass by value)传引用(pass by reference)要高效。
  而我们在C++面向对象编程时,因为用户自定义的构造函数和析构函数存在,使用pass-by-reference-to const更好。因为构造对象时,我们并不知道要传入的对象类型是什么,传const引用就可以解决这个问题。
  而转到STL的话,pass-by-value再次适用,因为STL中的容器、迭代器是使用C的指针塑造的,此时pass-by-value守则适用。(参见条款20)

请记住:
  当我们考虑使用C++高效编程时,使用什么策略和守则,要看我们使用C++哪部分次语言。

原文地址:https://www.cnblogs.com/Burgess-Fan/p/6805001.html