C++所谓的 pointer 可以有多种含义。
一类是从 C 照搬的 pointer ,是一类内建类型。
另一类是库中约定的泛化的 pointer ,如满足标准 NullablePointer requirements 的类型(例如 unique_ptr 的实例)。这些类型往往也被直接称为 pointer ,如 smart pointer 。严格来说这些类型只是 pointer-like ,限制比内建 pointer 小,除了 CopyConstructible 之类的语义约定外,通常只要求特定的*或->操作之一(连这些操作都没有的一般称为 handler )。
iterator 是指库(如 SGI 或标准库)约定的概念,一般指满足标准 Iterator requirements 的类型。这对右值 r 只要求*r 和++r ,限制同样比无论哪种 pointer 都小得多。
在标准库的框架中,内建的 pointer 是 random access iterator ,然后可以很容易推出 pointer 是 iterator :
random access iterator 是 bidirectional iterator ;
bidirectional iterator 是 forward iterator ;
forward iterator 是 input iterator ;
input iterator 是 iterator 。
Q.E.D.
反过来不成立。
至于其它意义上的 pointer ,连++都不保证有,就自然不是 iterator 了。
@
pagict 看清楚标题。
C++的 iterator 哪来的 next()。
@
sagaxu 关虚拟地址毛线?
unique_ptr 跟地址有一腿?
逻辑地址和物理地址就不能跟 pointer 有一腿?
@
nicevar 哪个语言的指针是所谓的内存地址?