Fra*_*ank 4 c++ types size-type
我经常有一些类,它们大多只是一些STL容器的包装器,如下所示:
class Foo {
public:
typedef std::vector<whatever> Vec;
typedef Vec::size_type size_type;
const Vec& GetVec() { return vec_; }
size_type size() { return vec_.size() }
private:
Vec vec_;
};
Run Code Online (Sandbox Code Playgroud)
我不太肯定回来size_type.通常,某些函数会调用size()并将该值传递给另一个函数,并且该函数将使用它并可能将其传递给它.现在每个人都必须包含那个Foo标题,虽然我真的只是传递一些大小值,但这应该只是unsigned int...?这里做什么是正确的?最好的做法是size_type到处使用吗?
STL将这些类型定义为容器的抽象接口.它旨在支持任何类型的后备存储.这可能是NUMA或磁盘支持的存储,其中size_type和ptr-type不同于系统内存.或者-在NUMA架构-它可能是快速,并且可以用很小的工作,具体的存储节点size_type和ptr_type-这是在很多平台上相关的优化.
至少,这是设计目标,也是由预期可能是支持C++的平台驱动的.一些早期的让步也允许STL实现者的快捷方式基本上禁用这种灵活性,我从未使用过使用它的STL实现.我之所以这样说是因为线性内存访问已经变得不那么成问题了,那个级别的STL开发实际上并不容易.
不过,它伤害了你多少钱?这是正确的做法.
这应该是vector<>::size_type喜欢你,这是最正确的方法.
也就是说,我知道很多人,包括我自己,都只会使用size_t.虽然它不强制一样,vector<>::size_type是size_t每一个我认识的实现.你应该没问题.
实际上,对于64位兼容性,它应该是size_t而不是unsigned int.作为包装类编写器,我将返回size_type.作为类客户端,如果它更方便,我会将它转换为适当的类型(size_t).
| 归档时间: |
|
| 查看次数: |
2039 次 |
| 最近记录: |