簡體   English   中英

當v大於INT_MAX時,std :: distance(v.begin(),v.end())的結果是什么?

[英]What is the outcome of std::distance(v.begin(), v.end()) when v is bigger than INT_MAX?

考慮以下代碼:

std::vector<char>::size_type size = static_cast<std::vector<char>::size_type>(std::numeric_limits<std::vector<char>::difference_type>::max()) + 1;
std::vector<char> v(size);
std::vector<char>::difference_type diff = std::distance(v.begin(), v.end());

其中size_typesize_t (unsigned int)相同, difference_typeptrdiff_t (signed int)相同。

如果向量的大小大於difference_type的限制, std :: distance函數會返回負值嗎?

對於隨機訪問迭代器類型, distance(a,b)定義為ba 減法隨機訪問迭代器有一個前提條件:

pre:存在類型difference_type的值n ,使得a + n == b

因此,如果向量大小對於difference_type來說太大,那么你打破了這個前提條件,給出了未定義的行為(可能是否定結果;也許是別的東西)。

暫無
暫無

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

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