簡體   English   中英

為什么隨機訪問迭代器的算術運算符接受/返回int而不是size_t?

[英]Why do random access iterator's arithmetic operators accept / return int and not size_t?

由於std::vector上的大多數操作都需要/ return size_t - 這是我用於索引的類型。 但是現在我已經啟用所有編譯器警告來修復我知道的一些已簽名/未簽名的轉換問題,這條消息讓我感到驚訝:

警告C4365:'參數':從'size_t'轉換為'__w64 int',有符號/無符號不匹配

它是由以下代碼生成的:

std::vector<int> v;
size_t idx = 0;
v.insert(v.begin() + idx + 1, 0);

我有很多其他類似的消息表明迭代器的算術運算符接受並返回int 為什么不size_t 修復所有這些消息是一件痛苦的事,並不能使我的代碼更漂亮!

我有很多其他類似的消息表明迭代器的算術運算符接受並返回int

不一定是int 它是迭代器類型的iterator_traits定義的(帶符號) difference_type 對於大多數迭代器類型,默認為ptrdiff_t

為什么不size_t

因為算術需要與有符號值一起正常工作; 人們會期望it + (-1)等於it - 1

它允許像它這樣的東西it += index; 其中index可以是正數也可以是負數(根據某些邏輯)。

與以下比較:

if (some_condition)
    it += index;
else
    it -= index;

如果我們只能傳遞無符號值,那將是必需的。

暫無
暫無

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

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