开始我的effective之旅了~
*用const代替#define我就不多说了
#define ASPECT_RATIO 1.653
const double ASPECT_RATIO = 1.653;
const char * const authorName = "Scott Meyers";
class GamePlayer
{
private:
static const int NUM_TURNS = 5;
}
声明后,还要定义
const int GamePlayer::NUM_TURNS;
让#define max(a,b) ((a)>(b)?(a):(b))去死吧
用inline int max(int a, int b) { return a > b ? a:b}
条款2
至于为什么用iostream取代stdio,我有一个理性加感性的认识:方便。剩下的留给底层的机制去做吧,等我看底层的时候再慢慢捉摸你们去。
这点很重要,解决了我长久以来的疑惑。我就说为什么自从我把iostream.h改称iostream的时候
不加using namespace std;的话就会报出n多的错,now i get it :〉
看到这里我就要开始骂那个操蛋的《高质量c++编程》了,怪不得越看越眼熟呢,你丫抄人家也不多改改!
其实这句就够了
既然malloc和free对构造函数和析构函数一无所知,把malloc/free和new/delete混起来用又象嘈杂拥挤的晚会那样难以控制,那么,你最好就什么时候都一心一意地使用new和delete吧。
这个也没啥好说的,这句比较有趣,不知道这书的作者是谁,哈哈
值得指出的是,有些老的专门为c写的预处理程序不知道处理c++风格的注释,所以象下面这种情形时,事情就不会象预想的那样:
解决这类问题的规则很简单:如果你调用new时用了[],调用delete时也要用[]。如果调用new时没有用[],那调用delete时也不要用[]。
现在自己做的程序还没有大道他说的那个地步,先不深究了
“
大家都知道,处理内存不够所产生的异常真可以算得上是个道德上的行为,但实际做起来又会象刀架在脖子上那样痛苦。所以,你有时会不去管它,也许一直没去管它。但你心里一定还是深深地隐藏着一种罪恶感:万一new真的产生了异常怎么办?
”
哈哈,这句话真实说到点子上了~
#define new(ptr, type) /
try { (ptr) = new type; } /
catch (std::bad_alloc&) { assert(0); }
而且有可能有人会重载new
“那么,怎么办?如果想用一个很简单的出错处理方法,可以这么做:当内存分配请求不能满足时,调用你预先指定的一个出错处理函数。这个方法基于一个常规,即当operator new不能满足请求时,会在抛出异常之前调用客户指定的一个出错处理函数——一般称为new-handler函数。”
但是没关系,还是先往下看。
377


--转向effective c++&spm=1001.2101.3001.11974&articleId=1622354&d=1&t=3&u=0d89360083ea427489dd9f1d8dec8716)

被折叠的 条评论
为什么被折叠?



