c++ - 如何处理来自核心准则检查器的有关gsl::at的静态分析警告?

标签 c++ visual-studio visual-c++ static-analysis cpp-core-guidelines

我在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/

相关文章:

C++ 异常 - 将 c-string 作为异常抛出是不是很糟糕?

visual-studio - 如何在 Visual Studio 11 中找到 dbcontext 模板

c# - 给图片框 URL

c++ - 当std::random_device熵未知时,如何初始化std::mt19937? (VS C++/Windows)

c++ - 我能告诉解决方案如何使用 C 编写此格式化数据吗

c++ - 在 windbg 的用户模式转储中查找 hwnd 信息

c++ - 显示场景图的 GUI

c++ - 使用unique_ptr并返回引用,或者我应该使用shared_ptr并根据需要进行复制

c++ - 使用 QMovie 在 GIF 动画和 Qt 中的信号/槽之间切换

c++ - 在现有项目中创建 CPPUnit 测试需要哪些 .cpp 和 .h 文件?