![](/img/trans.png)
[英]What is the return type of a lambda expression if an item of a vector is returned?
[英]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_t
是vector<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 int
或std::size_t
可以保存任意std::vector
的大小,但是再次它不是一個任意的std::vector
,它是一個建築物陣列,你自己應該知道是否可以無論如何,永遠不會超過std::numeric_limits<unsigned int>::max()
建築物。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.