Effective C++ (学习笔记详解 01~03)

本文介绍了C++中视C++为一个语言联邦的概念,强调了使用const、enum、inline替换#define的重要性。文章详细讨论了const的用法,包括常量指针、STL迭代器和const成员函数。enum作为常量替代#define的更优选择,以及inline函数在避免宏函数问题上的作用。建议开发者在编程中尽可能使用const来提高代码质量。
摘要由CSDN通过智能技术生成

01 :视C++为一个语言联邦

C++的四个次语言:

C:C++是在C语言的基础上发展而来的;

Object-Oriented C++:这是C++中不同于C的部分,这里主要指面向对象。class(包括构造函数和析构函数)、封装、继承、多态、virtual函数(动态绑定)…等等;

Template C++:C++中的泛型编程;

STL:标准模板库,对容器、迭代器。算法以及函数对象的规约有极佳的紧密配合与协调。

02: 尽量const、enum、inline替换#define

#define ASPECT_RATIO 1.653

记号 ASPECT_RATIO 可能不会被编译器看见,或者在编译器开始处理源码之前就被预处理器移走了,即你所使用的名称可能并未进入记号表。

解决办法:用const代替#define

1、const

const替换#define时,注意两个特殊情况:

1)定义常量指针。

​ 由于常量定义式通常被放在头文件内(以便被不同的源码含入),因此有必要将指针(而不只是指针所指之物)声明为const。例如若要在头文件内定义一个常量的char*-based字符串,你必须写const两次:

const char* const authorName ="Scott Meyers" ;

​ 另外,string对象通常比char*-based合宜,所以上述的authorName往往定义成这样更好些:

const std::string authorName ("Scott Meyers") ;
  1. class 专属常量

为了将常量的作用域限制于 class 内,必须让它成为 class 的一个成员。而为确保此常量至多只有一份实体,你必须让它成为一个static成员:

class GamePlayer {
   
private:
	static const int NumTurns = 5; //常量声明式
	int scores [NumTurns];         //使用该常量
	...
};

然而你所看到的是NumTurns的声明式而非定义式。通常C++要求你对你所使用的任何东西提供一个定义式,但如果它是个class专属常量又是static且为整数类型( integral type,例如 ints, chars),则需特殊处理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值