在哪里使用std::span



我想写一个函数,它可以从调用站点接受任何类型的连续缓冲区(例如std::arraystd::vector原始数组等(。我想出了两种方法。

方法#1:

void func( int* const buffer, const std::size_t expectedTokenCount );

这里,expectedTokenCount是将被插入到buffer中的元素的最大数目。

方法#2:

void func( const std::span<int> buffer, const std::size_t expectedTokenCount );

在这种方法中,我认为我最好先通过buffer.size( )检查buffer的大小,并将其与expectedTokenCount进行比较,以确保其容量大于或等于expectedTokenCount,否则会引发某种异常。这是一种比第一种方法更有效、更安全的方法吗?哪一个更好?如果将向量传递给span及其size成员函数,它的行为会发生变化吗?还是与数组的行为相同?

在哪里使用std::span?

如果您本来会使用指针和大小,那么您可以使用std::span而不是指针和大小。

〔#2〕是有效的。。。方法

当然。但是,您确实更改了指针的常量。您应该使用std::span<const int>

哪一个更好?

每个都有自己的用途。但在大多数情况下,通过两种尺寸是多余的

CCD_ 13的使用与使用两种尺寸的改变正交。您可以将#1作为void(std::span<const int>)执行,也可以将#2作为void(int* const buffer, const std::size_t buffer_size, const std::size_t expectedTokenCount)执行。

使用std::span通常是一种改进。

相关内容

  • 没有找到相关文章

最新更新