如果我例如有一個向量v,是它確定由標準來調用:用nullptr和零大小分配
void setData(const uint8_t* p, size_t s) {
v.assign(p, p+s);
}
setData(nullptr, 0);
通常是它總是確定調用當distance(first,last) == 0
上述STL函數XXX(InputIterator first, InputIterator last)
?
如果我例如有一個向量v,是它確定由標準來調用:用nullptr和零大小分配
void setData(const uint8_t* p, size_t s) {
v.assign(p, p+s);
}
setData(nullptr, 0);
通常是它總是確定調用當distance(first,last) == 0
上述STL函數XXX(InputIterator first, InputIterator last)
?
是的。將nullptr
值複製到另一個指針對象是可以的,這就是所有的實現都可能做到的。它已經被禁止通過結尾(在這裏由begin == end定義)或取消引用。
除了Potatoswatter所說的外,C++還製作了表達式nullptr + 0
valid。這在C中不是這樣。
是......爲什麼不呢? – WeaselFox
+1。 @ WeaselFox沒那麼快。你確定這個標準規定,如果大小爲零,它不會嘗試指針或迭代器解引用?我們可以在UB-land在這裏。 – Bathsheba
@Bathsheba這個標準看起來確實需要這麼做,當它說[p,p + s)中的每個迭代器都應該只被取消一次。你可以做的唯一的論點是*不會*說[p,p + s)之外的迭代器不應該被解除引用,但是就像它沒有說'v.assign'不應該隨機地輸出'噓!'。 – hvd