簡體   English   中英

與size_t比較,返回int嗎?

[英]Compare with size_t, return int?

我正在編寫“如何像C ++中的計算機科學家那樣思考”中的一些代碼示例,其中涉及處理紙牌類型的對象和卡片組。 我正面臨這種情況:

int Card::find(const std::vector<Card>& deck) const {
    size_t deckSize = deck.size();
    for (size_t i=0; i<deckSize; i++)
        if (equals(*this, deck[i])) return i;

    return -1;
}

我不能像文本中那樣在Visual Studio 2010中的C ++中的向量上使用“ .length()”,而不得不使用返回(我相信)std :: size_type的.size()。 我一直認為我可以使用size_t並避免使用它,以避免出現在不同體系結構上的問題,但是我想知道我是否返回i ,但是它大於整數,我是否會使程序崩潰?

[在我的問題中進行了更詳細的編輯:]一旦我開始將矢量用於比卡更大的東西,由於編譯器不匹配警告,我考慮使用unsigned int,但是我覺得返回unsigned int或int有幾個問題:1) int將不會采用足夠大的向量索引。 2)返回unsigned int不會讓我返回-1。 3)在所有體系結構上,unsigned int都不等於size_t(我也在ARM Cortex-M3上進行微控制器編程)。

如果向量足夠大該怎么辦?

size_tint不會“崩潰”您的程序,但這是一個壞習慣。 另一方面,STL包含用於執行操作的漂亮find算法。

在32/64位Windows和Linux上,int是32位。 如果在31日大於2,我將被截斷。 您可以使用unsigned int,除非您在向量中存儲了4個以上的G元素,否則您的程序就可以了:)

size_t通常是一個unsigned int但是您不能依賴它。 如果它大於int ,則不會崩潰,您只會溢出為(可能為負)數字。

假設您在一個向量中不會有成千上萬張卡片,那么我很樂意返回int

您還可以返回std::pair<size_t, bool> ,類似於std::map insert() 第二個模板參數表示成功或失敗。

如果可以,也可以使用boost :: optional

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM