effective C++ 第一章:从C转向C++

本文介绍了C++编程中的一些实用技巧,包括使用const和inline替代#define、使用iostream替代stdio.h、使用new和delete替代malloc和free等。这些技巧有助于提高代码质量和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、使用const和inline取代#define

1.使用const定义常量来代替预处理宏

  • 定义一个常量:const double ASPECT_RATIO = 1.653
  • 这种方法很有效。但有两个特殊情况要注意。
    - 定义指针常量时会有点不同,因为常量定义一般是放在头文件中(许多源文件会包含它),除了指针所指的类型要定义成const外,重要的是指针也经常要定义成const。例如,要在头文件中定义一个基于char*的字符串常量,你要写两次const:
const char * const authorName = "Scott Meyers";
-定义某个类(class)的常量一般也很方便,只有一点点不同。要把常量限制在类中,首先要使它成为类的成员;为了保证常量最多只有一份拷贝,还要把它定义为静态成员:
class GamePlayer {
private:
    static const int NUM_TURNS = 5; // constant eclaration 
    int scores[NUM_TURNS];      // use of constant
    ...
};
const int GamePlayer::NUM_TURNS;//在CPP中进行的定义

2.使用enum代替const定义数组的大小

class GamePlayer {
private:
    enum { NUM_TURNS = 5 }  // "the enum hack" — makes
    // NUM_TURNS a symbolic name 
    // for 5
    int scores[NUM_TURNS];// fine
};

3.使用inline代替#define,消除宏的负面影响

#defien max(a,b)    ((a)>(b)?(a):(b))

template<typename T>
inline const T&max(const T &a,const T &b)
{
    return a>b?a:b;
}

二、使用iostream代替stdio.h
如果使用了iostream,得到的是置于名字空间std下的iostream库的元素;如果使用iostream.h,得到的是置于全局空间的同样的元素。在全局空间获取元素会导致名字冲突,而设计名字空间的初衷正是用来避免这种名字冲突的发生。还有,打字时iostream比iostream.h少两个字,这也是很多人用它的原因。:)

三、使用new和delete,而不是malloc和free
new和delete会分别调用构造和析构,而malloc和free不会:对于非内建类型,malloc不仅不会调用构造函数,而且内存分配时malloc很可能并不会生效。

string *stringarray1 = static_cast<string*>
    (malloc(10 * sizeof(string)));//并没有为string的成员变量char *分配空间,也没有进行初始化
string *stringarray2 = new string[10];//OK
不要混用new和malloc以及delete和free
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值