《More Effective C++》学习笔记之一引用与指针

《More Effective C++》学习笔记之一引用与指针

  • 引用没有空引用
    首先要认识到,在任何情况下都不能使用指向空值的引用,引用应该被初始化,这也就意味着使用引用代码的效率比使用指针的要高,因为在使用引用之前不需要测试它的合法性。

  • 指针可以被重新赋值
    这也就是说,指针可以被重新赋值以指向另一个不同的对象,但是引用则总是指向在初始化时被指向的对象,以后不能改变。

  • 重载某个操作符时应该使用引用
    最普通的例子是操作符【】。这个操作符典型的用法时返回一个目标对象,其能被赋值

某博客总结的引用与指针:
它们都是地址的概念,其中指针指向一块内存,它的内容是所指内存的地址;而引用是某块内存的别名,具体来说,指针是一个变量的地址,而引用是一个变量的别名。
不同之处:
* 指针是一个实体,引用仅仅是个别名
* 引用必须被初始化,指针不必
* 引用只能在定义时被初始化一次,之后不可变;指针可以改变所指的对象
* 可以有const指针,但是没有const引用
* 不存在指向空值的引用,但是存在指向空值的指针,即引用不能为空,指针可以为空
* sizeof(引用)得到的是所指向的变量(对象)的大小,而sizeof(指针)得到的是指针本身(所指向的变量或对象的地址)的大小
* 指针可以有多级,引用只有一级
* 程序为指针变量分配内存区域,而引用不需要分配内存区域
* 使用指针传值涉及实参拷贝到形参,如果是引用 类型设计拷贝构造函数,要分配空间。

C++风格的四种类型转换

  • static_cast
  • const_cast
  • dynamic_cast
  • reinterpret_cast

static_cast

函数原型如下:
static_cast(expression)
具体用法如下:
* 用于类层次结构中基类和子类之间指针或引用的转换,向上转化(把子类的指针或引用转换成基类表示)是安全的;向下转型(把基类指针或引用转化成子类指针或引用)时,由于没有动态类型检查,所以是不安全的
* 用于基本数据之间的转换
* 把void指针转换成目标类型的指针
*# dynamic_cast
具体运算中:type_id必须是类的指针,类的引用后者void*;如果type_id是类指针类型,那么expression也必须是一个指针,如果是引用则其expressio也必须是引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值