C++引用、指针、迭代器的区别?

Share on:
100 Words | Read in about 1 Min | View times

Overview

引用与指针的异同、指针与迭代器的异同,是一个老生常谈的话题。

本系列文章将包括以下领域:

本章其他内容请见 《现代C++》

引用 vs 指针

引用和指针都可以指代一个变量或对象,但是它们的区别如下:

  • 引用是一个对象的别名,指针是一个新的存放一个对象地址的变量,指针可以有多级

  • 引用必须初始化,指针可以不用初始化,使用时指针需要判空,引用不需要

  • 引用不可为空,指针可以为空

  • 引用一旦初始化就不可以更改,指针可以更改指向的目标

  • sizeof操作符对引用是计算对象的大小,对指针仅计算指针变量本身的大小

指针 vs 迭代器

指针和迭代器都可以进行整数操作,都可以进行加减运算实现指代位置的移动,都支持相同类型互减得到二者的距离。但是它们的区别如下:

  • 迭代器的表现像指针,但本质是一个类模板,它是连接容器和泛型算法的粘合剂

  • 迭代器通过重载操作符实现类似指针的功能,如解引用、前进、后退、比较等

  • 迭代器返回值是对象的引用而不是对象的值

  • 指针拥有迭代器没有的功能,如指针可以指向函数,而迭代器只能指向容器

  • 指针满足迭代器的所有要求,但只是迭代器的一种,且只能用于某些特定容器

Prev Post: 『C++ 什么是POD?』
Next Post: 『C++类型转换』