1

我有一个关于在EASTL. 链接在这里。

即在方法上size()。这是它的样子:

template <typename T, typename Allocator>
inline typename vector<T, Allocator>::size_type
vector<T, Allocator>::size() const
{
    return (size_type)(mpEnd - mpBegin);  
}

size_typeis uint32_t, mpBegin/mpEnd是 T* 指针。

我不明白从 (mpEnd - mpBegin) 到 uint32_t 的转换如何等于向量中的元素。不应该除以sizeof(T)吗?否则我们只是得到向量中所有元素的字节大小?

我错过了什么?

编辑:除非 EASTL 向量不遵循向量的 stl 定义,但我在它上面找不到任何数据,据说它可以用 eastl 向量替换 stl 向量

4

2 回答 2

2

不是强制转换导致操作等于数组中元素的数量。指针减法在这里已经做了正确的事情。当您从另一个指针中减去一个指针时,会考虑它们指向的类型的大小。没有必要除以sizeof(T)。一直都是这样,即使在 C 中也是如此。转换只是将其转换为返回值的正确整数类型,如果还没有的话。

于 2012-04-14T19:28:57.957 回答
1

char*如果您正在使用或可能,则大小仅以字节为单位void*。否则,它在sizeof(T). 因为mpEndmpBeginT*

于 2012-04-14T19:28:34.780 回答