编写现代C代码GSL400正式可

北京治疗白癜风一共需要多少钱 https://m.39.net/disease/a_5599614.html

大家过年好!

要搞明白什么是GSL,需要先清楚,什么是C++CoreGuidelines。

C++CoreGuidelines是一份简单的文档,里面描述了一组旨在编写现代C++代码的指导原则。这项工程由C++的原作者BjarneStroustrup发起并主导,主要聚焦在一些C++工程中出现的各种顶层设计问题,例如,接口设计,资源管理,内存管理和并发等。这些顶层设计会影响应用程序架构和库的设计。遵循这套指导原则,可以实现代码的静态类型安全(staticallytype-safe),规避潜在的资源泄漏问题,以及发现更多的代码逻辑错误,同时拥有更快的运行速度。

而GSL(GuidelinesSupportLibrary)是由微软开发的,C++CoreGuidelines指导原则的一个实现代码库,库中包含了C++CoreGuidelines里所建议的各种函数,类型等。整个代码库以各种头文件来实现,使用此代码库,需要使用支持C++14的编译器。

好了,正文开始

GSL的4.0.0版本已经正式可用,这次的版本包含了所有的安全编码规则,另外,我们还添加了一些额外的优化。

有哪些变化?废弃gsl::string_span移除gsl/multi_span头文件删除了gsl_前缀对not_null进行了修改gsl::span和std::span现已使用gsl::at的正确特化版本zstring系列不再要求使用空的尖括号,例如我们可以使用voidfoo(zstringstr)来代替:voidfoo(zstringstr)gsl::narrowing_error新增一个函数what(),用以显示错误的详细信息finally和final_action现在被标记为[[nodiscard]]GSL将可以在禁用异常的环境中工作,但有一些警告通过添加GSL_NO_IOSTREAMS标志,GSL将在不支持iostream的环境中工作更新了编译器支持CMake和构建优化

废弃gsl::string_span

最新版的CppCoreGuidelines中删除了string_span。建议改用std::string_view,std::span或gsl::span。为了更紧密地使GSL与CppCoreGuidelines保持一致,我们弃用了string_span和zstring_span的实现,包括basic_string_span、basic_zstring_span和所有相关类型。目前,我们将继续保留gsl/string_span头文件,但不会积极处理或维护它。可以在README.md中找到所有支持和不支持的类型/功能的列表。

移除gsl/multi_span

multi_span、strided_span和gsl/multi_span中的所有其他内容在一年前的GSL3.0.0中已被弃用,现在是从库中删除它们及其相关测试的时候了。

头文件删除了gsl_前缀

以前在其名称中包含gsl_前缀的所有标头都已删除此前缀。例如,gsl/gsl_algorithm现在是gsl/algorithm。gsl_前缀文件仍然存在并传递给更新的文件,但将在未来的版本中删除。

对not_null进行了修改

为了更紧密地使GSL与CppCoreGuidelines保持一致,gsl::not_null现在只接受与nullptr相当的类型。以前,它只接受可从nullptr分配的类型,但这比CppCoreGuidelines的意图更严格。

函数make_not_null和make_strict_not_null以及not_null比较运算符现在都是noexcept。

gsl::span和std::span现已使用gsl::at的正确特化版本

gsl::span和std::span现在有自己独立的gsl::at特化,以确保两个版本的span之间的行为一致。导入gsl/span时会引入两个重载版本。std::span重载可以与gsl/util分开包含。

GSL将可以在禁用异常的环境中工作,但有一些警告

gsl::narrow是库中唯一可能引发异常的部分,并且已移至其自己的头文件gsl/narrow中。仅当启用异常时,此头文件才包含在gsl/gsl中。这允许在环境中工作的库用户无一例外地使用库的所有其他组件。

注意:gsl::narrow_cast仍然在gsl/util中,因为它不会抛出异常。

更新了编译器支持

支持的编译器/工具集列表已更新为更新版本,如下图所示:

CMake和构建优化

GSL安装逻辑现在由CMake选项GSL_INSTALL所保护修复了GSL库在32位主机上构建然后在64位机器上使用的问题如果定义了CMAKE_CXX_STANDARD,构建将使用它清理英特尔编译器的GSLSUPPRESS警告修复了没有std::span的C++20编译器的构建失败清理了一些静态分析警告CMake缓存变量VS_ADD_NATIVE_VISUALIZERS已重命名为GSL_VS_ADD_NATIVE_VISUALIZERS

总结

BjarneStroustrup创造了屠龙宝刀C++,但我等小朋友容易误用伤人,又贴心地创造了瑞士军刀C++CoreGuidelines。




转载请注明:http://www.aierlanlan.com/cyrz/5904.html