我对EASTL
中矢量的实现有疑问。
链接为here.
即,方法size()
。这是它的样子:
template <typename T, typename Allocator>
inline typename vector<T, Allocator>::size_type
vector<T, Allocator>::size() const
{
return (size_type)(mpEnd - mpBegin);
}
size_type
为uint32_t
,mpBegin
/ mpEnd
为T *指针。
我不明白来自(mpEnd - mpBegin)的uint32_t的转换是否等于向量中元素的数字。它不应该被sizeof(T)
除以?否则我们只得到向量中所有元素的字节大小?
我错过了什么?
编辑:除非,EASTL矢量不遵循矢量的定义,但是我找不到任何数据,并且它可能用东向量替换stl向量
答案 0 :(得分:2)
这不是导致操作等于数组中元素数量的强制转换。指针减法在这里做了正确的事情。当您从另一个指针中减去一个指针时,会考虑它们指向的类型的大小。没有必要除以sizeof(T)
。它一直是这种方式,即使在C语言中。演员只是将它转换为正确的整数类型作为返回值,如果它还没有。
答案 1 :(得分:1)
如果您使用char*
或void*
,则大小仅以字节为单位。否则,它在sizeof(T)
。由于mpEnd
和mpBegin
为T*
。