您的位置:首页 > 编程语言 > C语言/C++

让自己习惯C++

2015-08-25 21:06 501 查看
条款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出现在你的代码中。想法替换掉。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: