漫漫开发路▲3.0.0发布,微软官宣:GSL( 二 )


CMake的改进
新版实现中现已支持find_package 。 一旦新版本完成安装 , 则可以使用find_package(Microsoft.GSLCONFIG)轻松找到GSL库 。
关于multi_span和strided_span的废弃声明
为了将GSL的微软实现和C++核心规范(CoreGuidelines)更好地保持一致 , 我们决定将gsl::multi_span和gsl::strided_span的实现声明为废弃 。 虽然现在我们还是会提供这些头文件 , 但是它们将不会再进行开发和维护 , 除非C++核心规范需要它们 。
实现变更可能导致的编译失败及修复措施
变更:在gsl::span中 , 原来带符号的std::ptrdiff_t类型修改成无符号的std::size_t可能会导致带符号/无符号的不一致 。
修复措施:使用static_cast或者gsl::narrow_cast来解决这个不一致问题 。
变更:gsl::multi_span和gsl::strided_span被声明为废弃 。
修复措施:以常量引用的方式传递多维数组 , 而不是使用gsl::multi_span 。
变更:使用到了movedspan帮助函数的代码可能会产生编译错误 。 例如span比较操作符 , gsl::make_span等 。
修复措施:当你使用到这些函数的时候 , 请包含<gsl/span_ext> , 而不是<gsl/span> 。
变更:对契约违规抛出异常已经不再支持 。
修复措施:当应用程序终止运行之前 , 请使用一个终止处理例程来记录相关的诊断信息 。 对抛出异常这一行为的依赖将不再被确保是安全的 。
总结
内存越界的确是一个很容易被忽略且难以诊断的问题 , 如果善用GSL , 应该会显著的减少此类编码错误 , 进而提升产品健壮性 。
漫漫开发路▲3.0.0发布,微软官宣:GSL
文章图片