zoukankan      html  css  js  c++  java
  • 条款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++哪部分次语言。

  • 相关阅读:
    前端-----盒子模型
    跨域
    DRF的分页
    DRF的权限和频率
    DRF 版本和认证
    DRF的视图和路由
    APIView和View的区别
    Serializers序列化组件
    RESTful
    Vuex以及axios
  • 原文地址:https://www.cnblogs.com/Burgess-Fan/p/6805001.html
Copyright © 2011-2022 走看看