zoukankan      html  css  js  c++  java
  • 让自己习惯C++

    条款1.C++是一个语言联邦

         过程形式(procedural)

         面向对象形式(object-oriented)

         函数形式(function)

         泛型形式(generic)

         元编程形式(metaprogramming)

        NOTE:

        C++有四个次语言:

      1.C  

         no templates ,no exceptions ,no overloading...

      2.object-oriented C++ 

         class, encapsulation ,inheritance ,polymorphism ,virtual function...

      3.template C++ 

        template metaprogramming(TMP  模板元编程)

               这块接触比较少!!!!

         4.STL

                containers, iterators,algorithms,function objects.

               这块接触也比较少!!!

          所以,C++高效编程守则视状况而定,取决于使用C++的那一部分。不过觉得,我暂时还考虑不到性能问题,先解决功能问题再说。

          条款2:尽量以const ,enum,inline 替换#define(prefer consts,enums,and inlines to #defines)

              其实也是,宁愿以编译器替换预处理器。#define 变量在preprocess时被替换掉了。最好让变量保留,编译器可以看到,为了让标识符进入

         sysmbol table( 记号表)。

                const double AspectRation = 1.653; //这样比#define AspectRation 1.653 更科学,易debugg问题。

            对于const 替代 #define有2点:

                   1.常量指针:

                        const char* const authorName = "scott meyes";

                        cosnt std::string authorName ("scott meyes"); //貌似这个效果最好。暂时不知道原因???

                    2.class的专属常量:

                       class GamePlayer{

                        private:

                             static const int NumTurns = 5;//常量声明式  ,这个不懂,以前以为这种写法就是对变量的definition.这里为何只是declaration ???

                             int scores[NumTurns];  //使用该常量

                             ....

                          };

                       const int GamePlayer::NumTruns;//NumTurns的定义

                       看到上面的code,有点闷了!!这个跟之前理解的变量的声明和定义完全反过来了。那到底如何区别变量的declaration/definition???

                      #define 是不可以控制作用域的,const可以。

                       也提到了enum hack 这个知识点。其实就是枚举一个标识符并赋值,当int 数据类型使用。

                       

                      以上提到的都是简单的宏,对于宏参模式(看起来很像函数),用inline函数代替。

                     直接上例子了:

                       #define call_max(a,b) f((a)>(b)?(a):(b))

                        int a = 5 , b = 0;

                        call_width_max(++a,b);//a 被累加了2次

                        call_width_max(++a,b+10);//a被累加了1次

                       good code:

                           template<typename T>

                           inline void callwithmax(const T& a, cosnt T& b)//pass by reference to const

                           {

                             f(a>b?a:b);

                            }

                 consts , enums and inlines 使我们对预处理器的依赖性减低了。特别是#define,但#include,#ifdef/#ifndef仍然需要。

                  NOTE:

                     对于单纯变量,最好const 对象或enums 代替#defines

                     对于带参数的宏,最好用inline函数 代替#define .

                  一句话,尽量不要让预编译的code出现在你的代码中。想法替换掉。

                    

  • 相关阅读:
    IndexedDB demo showcase
    javascript for
    IndexedDB
    web sql Database
    webSql
    哈哈 代表月亮
    网易
    Android 百度地图 SDK v3.0.0 (一)
    iOS使用Instrument的Leaks查找代码内存泄露
    换主页轮播的主题图片(4、删除)---轻开电子商务系统(企业入门级B2C站点)
  • 原文地址:https://www.cnblogs.com/chip/p/4758669.html
Copyright © 2011-2022 走看看