cpp-core-guidelines相关内容

理解 gsl::narrow 实现

C++ 核心指南有一个narrow cast 如果转换改变了值就会抛出.查看库的微软实现: //窄():一个检查版本的narrow_cast(),如果转换改变了值就会抛出模板T 窄 (U u) noexcept(false){Tt=narrow_cast(u);if (static_cast(t) != u)gsl::details::throw_exception(narrowi ..
发布时间:2021-12-31 21:57:56 C/C++开发

什么是“跨度"?我什么时候应该使用一个?

最近我收到了在我的代码中使用 span 的建议,或者在使用 span 的网站上看到了一些答案 -据说是某种容器.但是 - 我在 C++17 标准库中找不到类似的东西. 那么这个神秘的 span 是什么?为什么(或何时)使用它是非标准的好主意? 解决方案 是什么? A span 是: 对内存中某处 T 类型的连续值序列的非常轻量级的抽象. 基本上是一个 str ..
发布时间:2021-12-01 15:27:36 C/C++开发

如何正确使用《C++ 核心指南:C.146:在类层次结构导航不可避免的地方使用 dynamic_cast》

动机 C++ 核心指南建议在“无法避免类层次结构导航"时使用 dynamic_cast.这会触发 clang-tidy 抛出以下错误: Do not use static_cast to downcast from a base to aderived class;改用 dynamic_cast [cppcoreguidelines-pro-type-static-cast-downcast ..

编译器生成的默认构造函数如何比只初始化成员什么都不做的自写构造函数更有效?

由此答案触发:我在 示例,不好class X1 {//错误:不使用成员初始化程序字符串s;我上市:X1():s {“默认"},i {1} {}//...}; “好"字样示例使用类内成员初始化程序,并且没有用户声明的构造函数: 示例X2类{字符串s =“默认";int i = 1;上市://使用编译器生成的默认构造函数//...}; 在该特定示例(或任何其他示例)中,编译器生成的构造 ..

gsl ::抑制整个包含语句

我正在将“准则支持库检查器"集成到我的项目中. Microsoft.CppCoreCheck Microsoft.Gsl 当我运行它时,我从包括标准库,glm,boost等在内的库中得到了很多错误. 一个具体的例子是SDL.h,我在sdl_stdinc.h中得到警告. 我确保仅通过我控制下的一个标头包含SDL: ExtSDL.hpp #pragma once #prag ..
发布时间:2020-07-20 19:25:17 C/C++开发

什么是“跨度”?我什么时候应该使用一个?

最近我得到了在代码中使用 span 的建议,或者在网站上看到了使用 span -应该是某种容器。但是-我在C ++ 17标准库中找不到类似的东西。 那么这个神秘的 span 是什么,以及为什么(或何时) 解决方案 是什么? A span 是: a的非常轻量级的抽象内存中某个位置的 T 类型的连续值序列。 基本上是结构{T * ptr; std : ..
发布时间:2020-06-07 19:01:47 C/C++开发

gsl :: not_null< T *> vs. std :: reference_wrapper< T>与T&

最近,我提出了 C ++核心指南(congrats!),我非常关心 gsl :: not_null 类型。如 I.12:声明一个不能为null的指针 not_null : 帮助避免解除引用nullptr错误。要通过 提高性能,避免对nullptr进行冗余检查。 ... 通过说明 源中的意图,实现者和工具可以提供更好的诊断,例如 通过静态分析找到一些类错误,并执行 优化,例 ..

gsl库中的span和array_view有什么区别?

在最近的几次会议演讲中,我听说过Bjarne Stroustrup和其他人提到了C ++和支持他们的一些类型的新编码指南。 具体来说,我还记得 作为函数的参数(在时间约32:00时),作为参数的 而不是(T * p,int n) array_view 的建议。他们是两个选择,但同样的概念?还是我混淆的事情,他们实际上不是这么相关? 我似乎找不到任何他们应该是什么的权威定义。 ..
发布时间:2016-10-16 14:41:58 C/C++开发