《Effective C++》1-4 const成员函数、static、确定对象使用前已先被初始化

条款1:视C++为一个语言联邦

C是面向过程的语言,侧重点在于算法和数据结构。

C++是面向对象的语言,侧重点在于抽象出对象模型,使模型和问题契合。

区别:

Class:C++中的类是C没有的,但是C中Struct在C++中也可使用;Struct成员默认访问修饰符是public,而Class默认的是Private。

动态管理内存:C使用malloc/free函数,而C++除此之外还有new/delete关键字。

 Overload、Template:C中没有重载和模板。

C++四个层次:

1、C:内置数据类型 pass-by-value比 pass-by-reference 更合适。

2、Objec-Oriented C++:面向对象。构造函数和析构函数。pass-by-reference-const 更合适。

3、Template C++:泛型编程

4、STL:是template程序库,它对容器、迭代器、算法和函数对象有紧密配合和协调。pass-by-value


条款2:尽量以const,enum,inline替换#define

总结:

1、常量,最好以const对象或enum替换#define。

2、简单函数,用inline函数替换#define。

一、宏的弊端

编译器对宏的处理是在预处理阶段进行的,处理方式的核心思想是:简单替换

(1)简单的宏定义:

  1. 无参  #define <宏名>  <字符串>         例: #define PI 3.1415926
  2. 带参  #define <宏名> (<参数表>) <宏体>    例:#define MAX(a, b) ((a)>(b) ? (a) : (b))

(2)无法进入编译器

使用预处理定义了圆周率

#define PI 3.1415926

在预处理时, 所有使用PI的地方都将被替换,之后编译器在编译时从未看到过PI。这时如果遇到错误,报错时给出的是301415926,而不是PI,因为PI从未进入到符号表,这将导致错误难以理解。

二、const

上述问题一种解决办法是使用常量替换宏

const double PI=3.1415926

常量const替换#define时,有两点要注意:

1、替换字符串时,要定义成常量指针(指向常量的指针、底层指针)

#define name "xiaoming"
const string name="xiaoming"

2、 专属于class作用域的常量,而#define不重视作用域。<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值