来自cppreference:
constexpr reference operator[](index_type idx) const; constexpr reference operator()(index_type idx) const;
返回对序列的
idx
- 元素的引用。该 如果idx
超出范围(即,如果它更小,则行为未定义) 大于零或大于或等于size()
)。
重载operator[]
进行索引是有意义的,因为span表示可以引用连续对象序列的对象,但为什么operator()
,function call operator也会重载出于同样的目的?我不相信标准库中有类似的东西。
答案 0 :(得分:23)
它存在,因为mdspan
,a not-yet-accepted multi-dimensional span type使用operator()
进行索引。毕竟,operator[]
只需要一个索引,而mdspan
需要多个索引。
因此,为了让这两种类型具有尽可能相似的界面,span
也允许operator()
。
请注意,使用operator()
是C ++中用于多维索引的常见约定。与其他许多人一样,Eigen和Boost都使用它。
答案 1 :(得分:9)
跨度也超载 运算符() 用于元素访问,以提供与写入代码的兼容性 反对 图。
目前view
已重命名为mdspan
,尚未标准化。
正如Nicol Bolas'回答,mdspan
将使用operator()
接受多个索引。