Effective c++第一章(条款01-04)

从5月11日开始看effective c++,半年没看c++了,现在看居然还能看懂QAQ(我属于小白类型,连入门都算不上),把一些自己看完之后的重点总结写一下,便于今后可以回过来看看自己有什么收获。话不多说,开始今天的第一篇!!

第一章:让自己习惯c++

让自己习惯c++

条款01:视C语言为一个语言联邦(View C++ as a federation of languages)

说实话这个主要就是让我们了解一下c++这门语言,讲的就是四点:1. C C++是以C为基础;2. Object-Oriented C++ (C with class),在原有C基础上加上面向对象的特性,封装、继承、多态…等;3. Template C++ (泛型编程);4. STL 一个特殊的template程序库,懂得都懂这东西0.0。
以上四个次语言的切换遵守编程策略

请记住:
c++ 高效编程守则视状况而变化,取决于你使用C++的哪一部分。

条款02:尽量以const、enum、inline替换#define(Prefer consts、enums、and inline to #define)

#define ASPECT_RATIO 1.653

换成

const double AspectRation =1.653;

宏定义被预处理器拿走,记号名称ASPECT_RATIO可能没有进入记号表,编译器就会发出错误,而 AspectRation为一个语言常量,肯定会被编译器看到,一定会进入记号表。对浮点常量而言,const比define导致较少量的码。

这个const的位置不同有不同含义

const char* const authorName=“ABC”;
第一个const指向"ABC",第二个指向char*指针。

再者#define为"全局"的,一旦定义,整个编译过程有效,如果需要class专属常量(只在此class中有效)需要使用const

class ConstEstimate{
   
private:
       static const double FudgeFactor;      //声明
       //static const int NumTurns=5;        //错误->用于数组声明时发生错误
       enum {
    NumTurns=5 };                  //正确
       int scores[NumTurns]
       ...
};
const double CostEstimate::FudgeFactor=1.35; //定义
//const int ConstEstimate::NumTurns=5;       //错误

这里可能会发生错误,在编译期间需要知道数组的大小,改用"the enum hack"。

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

int a=5,b=0;
CALL_WITH_MAX(++a,b);    //a被累加两次
CALL_WITH_MAX(++a,b);    //a被累加一次

a的递增次数取决与和谁比较,有点烦!!

template<typename T>
inline void callWithMax(const T& a, const T& b){
   
  f(a>b?a:b)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值