为什么建议`std :: shared_ptr :: operator []`把`std :: ptrdiff_t`作为参数

mil*_*bug 14 c++ c++17

按照N4562提案,新提出的std::shared_ptr::operator[]发生在std::ptrdiff_t,这是一个符号类型.

这与标准库中的每个索引运算符不一致.甚至std::unique_ptr::operator[]需要std::size_t.

这个决定的理由是什么?

bip*_*pll 1

也许这应该是指针接口的统一。好的 ol' C 指针当用作数组时接受负索引:与;p[-2]相同 *(p - 2)ptrdiff_t因此自然地被签署。

  • 问题“为什么要使用允许我遇到错误的类型?” 这是我们经常听到的同样的问题。如果你传递一个“-1”,它总是一个错误,无论“shared_ptr”是否使用“int”或“unsigned”。因此,问题确实不应该说“这允许我遇到错误”,而应该是“为什么使用允许我*发现*我遇到的错误的类型?”。这就是为什么 `int` 优于 </signed-vs-unsigned>。 (2认同)