解引用指针并获取解引用地址

6

我读了STL,但是指针的使用让我感到困惑。

destroy(&*first);

首先是一个指针,然后"&*first"等于first,为什么不能直接使用first?

destroy声明如下:

void destroy(T* pointer)

T是一个模板参数。

2个回答

7
这很可能是由于运算符重载引起的。通常给迭代器命名为first,它们重载了operator*以返回容器所指向元素的引用,然后使用operator&来获取迭代器指向变量的地址。您可以在这里了解更多关于迭代器的知识。
然而,如果first是一个指针而不是用户定义的迭代器,那么您可以直接使用first。请注意,指针也可以是迭代器(具体来说,是RandomAccessIterator)。

1
严格来说,指针是迭代器,因此最后一部分并不完全正确。 - chris
@chris 是的,没错。已经编辑过来考虑到这一点了。 - Rapptz

3
如果参数已经是一个原始指针,则&*组合不起作用,正如您所指出的那样。但是,如果参数是具有重载一元*运算符的类类型,则&*不再是无操作。 &*模式的经典用法是将“通用”指针转换为原始指针。例如,如果it是与向量元素相关联的迭代器,则&*it将为您提供该向量元素的普通原始指针。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接