我读了STL,指针的用法让我很困惑。
destroy(&*first);
首先是一个指针,然后“& * first”等于第一个,为什么不直接使用? destroy声明如下:
void destroy(T* pointer)
T是模板参数。
答案 0 :(得分:7)
这很可能是由于运营商超载造成的。 first
是通常赋予迭代器的名称,它重载operator*
以返回对容器的指向元素的引用,然后operator&
用于获取迭代器所在的变量的地址指向。您可以阅读有关迭代器here的更多信息。
但是,如果first
是指针而不是用户定义的迭代器,那么您可以直接使用first
。请注意,指针可以是迭代器(具体来说,RandomAccessIterator
s)。
答案 1 :(得分:3)
如果参数已经是原始指针,那么&*
组合什么都不做,正如您已经注意到的那样。但是,如果参数是具有重载的一元*
运算符的类类型,则&*
不再是无操作。
&*
模式的经典用法是转换"泛型"指针指向原始指针。例如,如果it
是与向量元素关联的迭代器,则&*it
将为您提供指向该向量元素的普通原始指针。