C++学习文件


前言

本文为Effective C++ 读书笔记


一、注意事项

1、**class 的专属常量**
class GamePlayer{
private:
	static const int NumTurns = 5;
	int scores[NumTurns];
	...
	};

上面NumTurns为声明式而非定义式。通常C++要求你对你使用的任何东西提供一个定义式,但是如果它是class专属常量又是static且为整数,只要不取其地址就不用提供定义式。但是如果要取某个class的专属常量的地址,就需要提供定义式如下:

const int GamePlayer::NumTurns;

声明时有初始值,定义就不用了,这句放进实现文件,而非头文件。

2、注意:enum hack的行为某方面比较像#define 而不像 const。例如取一个const的地址是合法的。但是取一个enum地址就不合法,取#define地址通常也不合法。

3、记住:对于单纯常量,最好以const对象或enums替换#define
对于行似函数的宏,最好改用inline函数替代。

4、常量指针指向常量的指针

char greeting[] = "Hello";
const char* p = greeting;  //non-const pointer ,const data
char* const p = greeting;  //const pointer,non-const data
const char* const p = greeting; //const pointer,const data

快速识别方法:如果关键字const出现在 * 左边,表示被指物是常量;如果 * 出现在const右边,表示指针自身是常量。如果出现在两边,表示被指物和指针两都是常量。
注意:以下两种写法意义相同

void f1(const Widget* pw);
void f2(widget const *pw);

在这里插入图片描述注意:定义迭代器中指向常量的指针使用const_iterator

5、区分左值和右值
左值:指表达式结束后依然存在的持久对象,可以取地址,具名变量或者对象。
右值:表达式结束后就不在存在的临时对象,不可以取地址,没有名字
比如 int a = b + c;,a 就是一个左值,可以对a取地址,而b+c 就是一个右值,对表达式b+c 取地址会报错。C++11中右值又由两个概念组成:将亡值和纯右值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值