C++引用、指针、迭代器的区别?
100 Words | Read in about 1 Min | View times
Overview
引用与指针的异同、指针与迭代器的异同,是一个老生常谈的话题。
本系列文章将包括以下领域:
本章其他内容请见 《现代C++》
引用 vs 指针
引用和指针都可以指代一个变量或对象,但是它们的区别如下:
-
引用是一个对象的别名,指针是一个新的存放一个对象地址的变量,指针可以有多级
-
引用必须初始化,指针可以不用初始化,使用时指针需要判空,引用不需要
-
引用不可为空,指针可以为空
-
引用一旦初始化就不可以更改,指针可以更改指向的目标
-
sizeof操作符对引用是计算对象的大小,对指针仅计算指针变量本身的大小
指针 vs 迭代器
指针和迭代器都可以进行整数操作,都可以进行加减运算实现指代位置的移动,都支持相同类型互减得到二者的距离。但是它们的区别如下:
-
迭代器的表现像指针,但本质是一个类模板,它是连接容器和泛型算法的粘合剂
-
迭代器通过重载操作符实现类似指针的功能,如解引用、前进、后退、比较等
-
迭代器返回值是对象的引用而不是对象的值
-
指针拥有迭代器没有的功能,如指针可以指向函数,而迭代器只能指向容器
-
指针满足迭代器的所有要求,但只是迭代器的一种,且只能用于某些特定容器