【发布时间】:2022-01-21 00:34:27
【问题描述】:
我想编写一个函数,它可以从其调用站点接受任何类型的连续缓冲区(例如std::array、std::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 成员函数,其行为会发生变化还是会与数组相同?
【问题讨论】:
标签: c++ c++20 copy-elision std-span