Effective C++ 学习笔记

Item 1 . 尽量以const inline  取代 #define
   
原因1:  #define 出错编译器找起来困难,用const可以代替。
一、常量
  
普通常量:
   #define ASPECT_RATIO 1.653 // c
程序员常用方法

    const double ASPECT_RATIO = 1.653;   // c++
const替代
  
指针常量:
 
const char* const authorName = "Jeremy";
  *
号在const左边,表示指针指向的目标为常量;
  *
号在const右边, 表示指针本身为常量.

  
类成员常量:
  static const int NUM_TRUNS = 5; //
类的静态常量

二、函数
 
原因2: 
#define max(a,b)  ((a) > (b)) ? (a) : (b)
  
如果下面这样使用max函数,val1就会累加两次

  max( ++val1, val2);
 
所以使用
  inline int max(int a , int b) {return a > b ? a : b ;}
 
如果要与类型无关,那就要用template -__-
 
template <class T>
  inline const T& max(const T& a, const T& b) {return a > b ? a : b ;}

 
这儿的函数形参与返回值类型为T&,要不然就会传值而不传址了

Item 2. 尽量以<iostream>取代<stdio.h>
   
原因: 1, scanfprintf不具备型别安全 2 , 不可扩充
重载<<>>运算符, 可以让cout(cin)输出(输入)用户自定义的对象类型。
重载后用户就可以如果使用如下方法来输出(输入)一个分数了,而scanf(printf)却不能。
int i; 
Rational r; // r
是一分数
...
cin >> i >>r;
cout << i << r;
怎么来实现这个功能呢?下面是Rational的代码,特别注意重载<<运算符的代码。
class Rational
{
public:
  Rational(int numerator = 0, int denominator = 1);
  ...
private:
  int n, d; //
分子(numerator )和分母
(denominator )
friend ostream& operator<<(ostream& s, const Rational& r );
}

因为<<是二元运算符,又要用户习惯用cout << ,所以不做为类的成员来重载,而是通过友元来重载
如果做为类的成员来重载,则得调用 r <<cout 来输出了,用起来别扭
ostream& operator << (ostream& s , const Rational& r)
{
  s << r.n << '/' << r.d;
  return s;
}

boost库里面有Rational的实现,要仔细看看 -__-

Item 3. 尽量以new和delete取代malloc和free

Item 4. 尽量使用C++风格的注释形式

Item 5. 使用相同形式的new 和delete
调用new时用了[],必须在调用delete时用[],反之不使用
string *pStr1 = new string;

string *pStr2 = new string[100];

delete pStr1;

delete [] pStr2;
特殊情况:
typedef string AddressLines[4];

string *pal = new AddressLines; // 和new string[4]等价

所以用delete [] pal;

最好尽量不要对数组类型做typedef动作(好像在哪看过,推荐用typedef定义数组来着... -__- lzc也这样说)
据我观察如果用typedef定义一个数组,那命名最好用arrayInt10,arrayDouble12之之类比较好 :D

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值