【发布时间】:2016-10-06 19:39:02
【问题描述】:
这与标准库中的每个索引运算符都不一致。甚至std::unique_ptr::operator[] 也接受std::size_t。
做出这个决定的理由是什么?
【问题讨论】:
-
也许是因为委员会最终承认使用无符号类型作为索引是一个可怕的错误,他们正试图在新的东西上改变它?
-
那到底为什么是个错误?例如,使用
std::vector非常有意义。 -
@bipll 尝试向后迭代是一个痛苦的事实是一个好的开始。直觉上你会想写
for(auto i = cont.size() - 1; i > 0; --i),但你不能,因为它永远不会小于0。 -
我猜是因为你可以给
shared_ptr起别名,不像其他容器,你的shared_ptr实际上可以指向数组的中间,负索引可能是有意义的。但他们实际上要求索引是正数,所以在这里使用有符号类型是没有意义的。这似乎只是一个糟糕的决定。 -
在这种情况下,直觉上我总是会写
for(auto i(cont.rbegin())。