Подтвердить что ты не робот

Почему предложенный `std:: shared_ptr:: operator []` принимает `std:: ptrdiff_t` как аргумент

Согласно предложению N4562, новый предложенный std::shared_ptr::operator[] принимает std::ptrdiff_t, который является подписанным типом.

Это несовместимо с каждым индексирующим оператором в стандартной библиотеке. Даже std::unique_ptr::operator[] принимает std::size_t.

Какое обоснование для этого решения?

4b9b3361

Ответ 1

Возможно, это должна быть унификация интерфейса указателя. Хорошие оль-C-указатели при использовании в качестве массивов принимают отрицательные индексы: p[-2] совпадает с *(p - 2); и ptrdiff_t естественно подписывается.