跳到主要内容

std::shared_ptr<T>::operator[]

声明

C++17
element_type& operator[]( std::ptrdiff_t idx ) const;

索引由存储指针指向的数组。

如果存储的指针为 nullidx 为负,则行为未定义。

如果 Tshared_ptr 的模板参数)是一个数组类型 U[N],则 idx 必须小于 N,否则行为未定义。

参数

idx - 数组索引

返回值

指向数组的 idx-th 元素的引用,即 get()[idx]

异常

不抛出任何异常。

备注

T 不是数组类型时,该函数是否声明是未指定的。如果声明了该函数,则其返回类型是未指定的,但保证该函数的声明(但不一定是定义)是合法的。

示例

#include <cstddef>
#include <memory>
#include <iostream>
int main() {
const std::size_t arr_size = 10;
std::shared_ptr<int[]>
pis(new int[10]{0,1,2,3,4,5,6,7,8,9});
for (std::size_t i = 0; i < arr_size; i++){
std::cout << pis[i] << ' ';
}
}
结果
0 1 2 3 4 5 6 7 8 9

std::shared_ptr<T>::operator[]

声明

C++17
element_type& operator[]( std::ptrdiff_t idx ) const;

索引由存储指针指向的数组。

如果存储的指针为 nullidx 为负,则行为未定义。

如果 Tshared_ptr 的模板参数)是一个数组类型 U[N],则 idx 必须小于 N,否则行为未定义。

参数

idx - 数组索引

返回值

指向数组的 idx-th 元素的引用,即 get()[idx]

异常

不抛出任何异常。

备注

T 不是数组类型时,该函数是否声明是未指定的。如果声明了该函数,则其返回类型是未指定的,但保证该函数的声明(但不一定是定义)是合法的。

示例

#include <cstddef>
#include <memory>
#include <iostream>
int main() {
const std::size_t arr_size = 10;
std::shared_ptr<int[]>
pis(new int[10]{0,1,2,3,4,5,6,7,8,9});
for (std::size_t i = 0; i < arr_size; i++){
std::cout << pis[i] << ' ';
}
}
结果
0 1 2 3 4 5 6 7 8 9