420得票4回答
什么是“span”,在什么情况下应该使用它?

最近我得到了建议在我的代码中使用 span<T>,或者在这个网站上看到了一些使用 span 的答案 - 据说是某种容器。但是 - 我在 C++17 标准库中找不到类似的东西。 那么这个神秘的 span<T> 是什么,为什么(或何时)使用它是一个好主意,如果它是非标准的呢?

103得票3回答
在gsl库中,span和array_view有什么区别?

在最近几个会议的演讲中,我听到了Bjarne Stroustrup和其他人提到了C++的新编码指南以及一些支持它们的类型。 具体来说,我记得他们举例使用span<T>而不是(T* p, int n)作为函数的参数(在谈话中大约32:00时);但我也记得建议使用array_view...

78得票2回答
gsl::not_null<T*> 与 std::reference_wrapper<T> 与 T& 的区别

最近C++核心指南发布了(祝贺!),我关注gsl::not_null类型。如I.12:声明不能为null的指针为not_null中所述: 有助于避免解除引用nullptr错误。通过避免冗余的nullptr检查来提高性能。 ... 通过在源代码中说明意图,实现者和工具可以提供更好的诊断功能,...

22得票2回答
C++中类型的单位

在C++核心指南的P.1 change_speed示例中,它展示了一个Speed类型,并且如下所示使用:change_speed(Speed s); // better: the meaning of s is specified // ... change_speed(2.3); // er...

19得票3回答
为什么我不能使用大括号初始化列表构造一个 gsl::span?

根据C++核心指南所述,我应该使用gsl::span来传递半开序列。 我认为这意味着,不应该编写如下函数:void func(const std::vector&lt;int&gt;&amp; data) { for (auto v : data) std::cout &lt;&lt...

16得票2回答
CppCoreGuidelines C.21是否正确?

阅读Bjarne Stroustrup的Core C++ Guidelines时,我发现了一条与我的经验相矛盾的指南。 C.21规范要求: 如果你定义或者=delete任何一个默认操作符,那么就必须定义或=delete全部的默认操作符。 原因是: 这些特殊函数的语义密切相...

14得票2回答
如何使用C++的Expect运算符?

我正在使用C++开始一个项目,除了一些学校项目外,我以前没有在此之外使用过——这些项目远远没有我现在要处理的范围那么大。 我的目标是尽力遵循C++核心指南,以避免错误、提高性能和最重要的是:改善代码的可维护性。 我遇到了数百个问题,从我的g++ / Clang++版本不正确到无法找到标准库...

13得票2回答
编译器生成的默认构造函数如何比仅初始化成员的手写构造函数更高效?

在读这个答案的时候,我看到了核心指南中的如下内容: C.45: 不要定义仅初始化数据成员的默认构造函数,使用类内成员初始化器代替 其原因是: 原因 使用类内成员初始化器可以让编译器为您生成函数。编译器生成的函数可能更高效。 需要注意的是,这里特指仅初始化成员的默认构造函数,并且...

12得票3回答
C++核心指南:静态成员变量

我的类中有一个私有的静态向量,它保存了指向该类创建的所有对象的指针。这是必要的,因为每个对象都需要访问所有其他对象的信息来执行一些计算:// Header file: class Example { public: Example(); private: static std:...

12得票2回答
理解gsl::narrow的实现

C++核心准则中有一个narrow转换,如果转换改变了值就会抛出异常。看一下微软实现的库: // narrow() : a checked version of narrow_cast() that throws if the cast changed the value template ...