如何处理来自核心指南检查器的关于gsl::at的静态分析警告
How to handle static analysis warning from Core Guidelines checker about gsl::at?
我在Visual Studio中为我的项目激活了静态分析。Core Guidelines检查器说我应该使用gsl::at进行订阅。但我的代码是保存。消除这个警告最干净的方法是什么?我应该禁用它吗?我应该以不同的方式编写代码吗?我应该使用gsl::来引入支票的开销吗?我的代码是:
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>{});
}
相关文章:
- 警告处理为错误这里有什么问题
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- cppcheck在const std::string[]上引发警告
- GCC对可能有效的代码抛出init list生存期警告
- 如何在BST的这个简单递归实现中消除警告
- 关于std::move的使用,是否有编译警告
- g++ 在某个类成员未初始化时不发出警告
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 使用typeid警告未使用的变量
- 示例C++项目编译中的警告
- 将gsl c++程序与"英特尔MKL"链接
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 如何修复编译器警告 C6386 和 C6385?
- 返回语句后的代码,没有警告
- 获取隐式转换溢出从无符号到已签名的警告
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 在未链接的部分上生成警告
- 警告 C4552:">>":未使用表达式的结果
- C++ 警告:将新创建的 gsl::owner<> 分配给非所有者
- 如何使用GSL :: SPAN来修复任何数组以降低指示警告