为什么在C++中std::span中有element_type,std::span的value_type是remove_cv_t< element_type>?

z9ju0rcb  于 2023-04-08  发布在  其他
关注(0)|答案(1)|浏览(153)

在其他容器中,只有一个value_type,这正是模板参数。
但是为什么std::spanvalue_type是remove_cv_t的类型,并定义了另一个名为element_type的类型,据我所知,它只在unique_ptr,shared_ptr中使用。
这样做的目的是什么?

2ic8powd

2ic8powd1#

最近我自己也注意到了这一点,所以不能添加任何解释,但是FWIW,作为一种解决方案,我使用这个特性来可靠地获得任何范围的value_type

template<typename range_t>
using range_value_t = 
  std::remove_reference_t<decltype(*std::begin(std::declval<range_t&>()))>;

相关问题