cpp-core-guidelines相关内容
C++ 核心指南有一个narrow cast 如果转换改变了值就会抛出.查看库的微软实现: //窄():一个检查版本的narrow_cast(),如果转换改变了值就会抛出模板T 窄 (U u) noexcept(false){Tt=narrow_cast(u);if (static_cast(t) != u)gsl::details::throw_exception(narrowi
..
最近我收到了在我的代码中使用 span 的建议,或者在使用 span 的网站上看到了一些答案 -据说是某种容器.但是 - 我在 C++17 标准库中找不到类似的东西. 那么这个神秘的 span 是什么?为什么(或何时)使用它是非标准的好主意? 解决方案 是什么? A span 是: 对内存中某处 T 类型的连续值序列的非常轻量级的抽象. 基本上是一个 str
..
动机 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;上市://使用编译器生成的默认构造函数//...}; 在该特定示例(或任何其他示例)中,编译器生成的构造
..
根据 C ++核心指南,我应该使用gsl :: span传递半开序列. 我认为这意味着不要编写像这样的函数: void func(const std :: vector& data){对于(auto v:data)std :: cout数据){对于(auto v:dat
..
我正在观察以下代码的相当奇怪的行为: #include #include #include #include #include #include "gsl.h" template
..
在阅读微软的实现期间/CppCoreGuidelines/CppCoreGuidelines"rel =" nofollow noreferrer“> Cpp核心指南,我遇到两个问题: 为什么在gsl::span已经正常工作的地方提供gsl::string_span? 为什么要提供gsl::zstring_span,因为自C ++ 11起已经保证std::string以空值终止? 任
..
我试图了解如何在代码中使用Ensures().如示例,如果我尝试如下使用Ensures() ... int main(void) { int result = 0; // Some calculation Ensures(result == 255); return 0; } 如果result变量不等于255,则程序将崩溃,并显示以下输出"terminat
..
我正在将“准则支持库检查器"集成到我的项目中. Microsoft.CppCoreCheck Microsoft.Gsl 当我运行它时,我从包括标准库,glm,boost等在内的库中得到了很多错误. 一个具体的例子是SDL.h,我在sdl_stdinc.h中得到警告. 我确保仅通过我控制下的一个标头包含SDL: ExtSDL.hpp #pragma once #prag
..
C ++核心准则提到跨度,而不是“多跨度".但是-我看到Microsoft的GSL实现具有 multi_span类 template class multi_span { ... }; 因此
..
C ++核心指南具有抛出的narrow强制转换如果强制转换更改了值.查看该库的 Microsoft实现: // narrow() : a checked version of narrow_cast() that throws if the cast changed the value template T narrow(U u) noexcept(fals
..
最近我得到了在代码中使用 span 的建议,或者在网站上看到了使用 span -应该是某种容器。但是-我在C ++ 17标准库中找不到类似的东西。 那么这个神秘的 span 是什么,以及为什么(或何时) 解决方案 是什么? A span 是: a的非常轻量级的抽象内存中某个位置的 T 类型的连续值序列。 基本上是结构{T * ptr; std :
..
我习惯于在表示不应为null的指针时使用__attribute__((nonnull)). void f(int* ptr __attribute__((nonnull))); int main(){ int* ptr = new int(1); f(ptr); } void f(int* ptr){/*impl*/} 但是,对于GSL,还有not_null包装
..
在 (例如 std :: logic_error , std :: runtime_error 及其子类,例如 std :: system_error )具有期望字符串参数的构造函数,例如: domain_error(const string& what_arg); domain_error(const char * what_arg); w
..
在阅读Bjarne Stroustrup的CoreCppGuidelines时,我发现了一条与我的经验相矛盾的指南。
..
最近,我提出了 C ++核心指南(congrats!),我非常关心 gsl :: not_null 类型。如 I.12:声明一个不能为null的指针 not_null : 帮助避免解除引用nullptr错误。要通过 提高性能,避免对nullptr进行冗余检查。 ... 通过说明 源中的意图,实现者和工具可以提供更好的诊断,例如 通过静态分析找到一些类错误,并执行 优化,例
..
在最近的几次会议演讲中,我听说过Bjarne Stroustrup和其他人提到了C ++和支持他们的一些类型的新编码指南。 具体来说,我还记得 作为函数的参数(在时间约32:00时),作为参数的 而不是(T * p,int n) array_view 的建议。他们是两个选择,但同样的概念?还是我混淆的事情,他们实际上不是这么相关? 我似乎找不到任何他们应该是什么的权威定义。
..