繁体   English   中英

返回向量大小的getter应该返回什么类型的值?

[英]What type of value should it be returned by getters that return size of vector?

返回向量大小的getter应该返回什么类型的值?

例如,我在以下类型的项目中有许多getter,我需要(int)强制转换来删除编译警告:

int getNumberOfBuildings() const { return (int)buildings.size(); }

C ++ 03方式:

std::vector<Building>::size_type getNumberOfBuildings() const
{ return buildings.size(); }

C ++ 11方式:

auto getNumberOfBuildings() const -> decltype(buildings.size())
{ return buildings.size(); }

C ++ 14方式:

auto getNumberOfBuildings() const
{ return buildings.size(); }

你应该返回一个std::size_t 当您使用默认分配器时, std::size_tvector<T>::size()的返回类型。 vector<T>::size()返回vector<T>::size_type ,当你使用默认分配器(你最有可能使用它)时,它只是std::size_t的typedef。

std::vector提供了一个typedef, std::vector<>::size_type ,它指示哪个是用作vector::size结果的类型:

std::vector<TYPE>::size_type getNumberOfBuildings() const { return buildings.size(); }

但是,这通常是size_t ,因此您可以直接使用后者:

#include <cstddef>

std::size_t getNumberOfBuildings() const { return buildings.size(); }

正式答案确实是std::vector<Building>::size_type ,如其他答案中所述。

真正的答案取决于您是否已在程序中使用了用于表示建筑物数量的类型。 它可以是int ,可以是unsigned ,也可以是某个typedef名称TBuildingCount 这是您在这种情况下应该使用的类型。 它可能需要强制转换来抑制编译器警告,但这通常是这样。

我没有看到你的其余代码,所以我不能肯定地说,但我猜想建筑物存放在某个地方(或任何其他容器)的某个矢量这一事实只是一个实现细节,这不应影响您对这些建筑物进行计数的类型选择。 即使以使用其size_type返回计数的间接方式,也不需要暴露该包含者的存在(或依赖它)。

换句话说,如果您已经决定使用int来计算建筑物,那么您的问题中的实施是您应该坚持的。

与许多其他答案相比,函数的返回值实际上更多地取决于您的界面而不是您在引擎盖下使用的界面。 你是否返回了矢量的大小并希望每个人都知道它? 那么,继续使用std::vector::size_type 但是你实际上是否返回了一些抽象的计数变量,比如建筑物的数量,那么我认为std::vector::size_type属于你的界面,因为那只是一个实现细节。

如果它是你返回的东西的大小(但不一定知道它是引擎盖下的向量),我会使用好的旧std::size_t ,但如果它是某个东西的数量,那么unsigned int在概念上更多适当。 当然没有人保证unsigned intstd::size_t可以保存任意std::vector的大小,但是再次它不是一个任意的std::vector ,它是一个建筑物阵列,你自己应该知道是否可以无论如何,永远不会超过std::numeric_limits<unsigned int>::max()建筑物。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM