2014-02-18 25 views
4

如果我例如有一個向量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)

+2

是......爲什麼不呢? – WeaselFox

+0

+1。 @ WeaselFox沒那麼快。你確定這個標準規定,如果大小爲零,它不會嘗試指針或迭代器解引用?我們可以在UB-land在這裏。 – Bathsheba

+2

@Bathsheba這個標準看起來確實需要這麼做,當它說[p,p + s)中的每個迭代器都應該只被取消一次。你可以做的唯一的論點是*不會*說[p,p + s)之外的迭代器不應該被解除引用,但是就像它沒有說'v.assign'不應該隨機地輸出'噓!'。 – hvd

回答

1

是的。將nullptr值複製到另一個指針對象是可以的,這就是所有的實現都可能做到的。它已經被禁止通過結尾(在這裏由begin == end定義)或取消引用。

1

除了Potatoswatter所說的外,C++還製作了表達式nullptr + 0valid。這在C中不是這樣。