Почему std :: span перегружает оператор вызова функции для индексации? - PullRequest
0 голосов
/ 29 апреля 2018

От cppreference :

constexpr reference operator[](index_type idx) const;
constexpr reference operator()(index_type idx) const;

Возвращает ссылку на idx -й элемент последовательности. поведение не определено, если idx находится вне диапазона (т.е. если оно меньше чем ноль или больше или равно size()).

Имеет смысл перегрузить operator[] для индексации, поскольку span представляет объект, который может ссылаться на непрерывную последовательность объектов, но почему operator(), оператор вызова функции также перегружен для той же цели? Я не верю, что в стандартной библиотеке есть что-то похожее на это.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Из соответствующего предложения :

пролет и перегрузки Оператор () для доступа к элементу, чтобы обеспечить совместимость с кодом, написанным на действовать против вид.

view был переименован в mdspan, что еще не стандартизировано.

Как правильно отмечено в ответе Николя Боласа, mdspan будет использовать operator() для принятия нескольких индексов.

0 голосов
/ 29 апреля 2018

Это происходит потому, что mdspan, - еще не принятый тип многомерного диапазона , использует operator() для индексации. В конце концов, operator[] требует только один индекс, а mdspan требует многократного индексирования.

Таким образом, чтобы эти два типа имели максимально похожий интерфейс, span также позволяет operator().

Обратите внимание, что использование operator() является общим соглашением в C ++ для многомерной индексации. Eigen и Boost используют его, как и многие другие.

...