0

我有一个std::array<std::shared_ptr<void>, N>,并且我有方法可以将这个缓冲区的一部分作为不同的类型来访问,我想使用std::span<std::shared_ptr<T>>这些方法。

有没有办法在不调用 UB 的情况下构建这样的跨度?

4

1 回答 1

2

不,这是不可能的:无论转换为 的能力如何void*T*您都无法转换void**(指向您的第一个指针的指针),T**因为那里没有实际的T*对象,而且您当然不能转换std::shared_ptr<A>*std::shared_ptr<B>*任何不同的对象A并且B-< code>std::shared_ptr<T> 不仅仅是T*内部的(因为控制块),即使是你也不允许“解包”结构数组并将它们视为内容数组(使用)的神奇例外std::complex

于 2020-07-05T14:20:30.277 回答