我在Visual Studio中为我的项目激活了静态分析。核心准则检查器说,我应该使用gsl::at进行订阅。但是我的代码已保存。摆脱此警告的最干净方法是什么?我应该禁用它吗?我应该以不同的方式编写代码吗?我应该在引入支票开销时使用gsl::: at吗?我的代码是:
template <typename T, size_t N>
void increase(T(&data)[N])
{
for (size_t i = 0; i < N; ++i)
data[i] +=1;
}
最佳答案
我自己找到了解决方案。因为大小是在编译时已知的,所以可以使用std::array,std::get和std::index_sequence。如果索引超出范围,则std::get会导致编译错误。不再需要运行时检查。
template <typename... Ts>
constexpr void noop(Ts...) noexcept {}
template <typename T, size_t N, size_t... I>
constexpr void increase(std::array<T, N>& data, std::index_sequence<I...>) noexcept
{
noop((std::get<I>(data) += 1)...);
}
template <typename T, size_t N>
constexpr void increase(std::array<T, N>& data) noexcept
{
increase(data, std::make_index_sequence<N>{});
}
关于c++ - 如何处理来自核心准则检查器的有关gsl::at的静态分析警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60335311/