c++ - gsl::span - 指向结束的指针

标签 c++ cpp-core-guidelines guideline-support-library

我需要将一个 gsl::span 传递给一个函数,该函数需要一个指向开始的指针和一个指向结束的指针。我更新了函数以使用 gsl::span 来避免不使用指针算术警告。那么如何让指针指向末尾呢?

我正在尝试调用 std::ctype::widen。我使用什么神奇的咒语来获取 std::ctype::widen 函数的结束参数的值?

我尝试了以下方法。

&(*str.cend())

我还尝试了以下方法。

&str[srcLen]

两者都会导致崩溃。

我可以尝试以下操作,但这只会导致我最初试图解决的警告。

str.data() + str.length()

我开始认为整个 C++ 核心指南和指南支持库的想法太差,不值得付出努力。这是我第二次遇到“gsl 引起了我最初试图解决的确切警告”问题。

最佳答案

span 与大多数 C++ 库一样,旨在与接受模板迭代器的代码一起使用。您可以将 begin/end 传递给算法或其他容器等。

当您必须处理纯粹基于特定迭代器对(如指针)的接口(interface)时,此类 API 几乎无法正常工作。这与试图获取指向 std::vector 末尾的指针没有什么不同;你迟早要进行指针运算。

但是如果您对有关指针算法的警告感到恼火,请尝试使用 std::next(str.data(), str.size()) 来计算结束指针。静态分析工具可能会提示这一点,但实际上不应该。

关于c++ - gsl::span - 指向结束的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48820192/

相关文章:

c++ - gsl assert 与 c++ 中的 assert 的优势?

c++ - 函数返回的 gsl::span 有错误的字节

c++ - 强制在继承类中重新实现静态函数

c++ - 从文件中读取 double 值仅给出输出 s -0000.0000

c++ - 修改 not_null 以禁止与 nullptr 进行比较

c++ - CppCoreGuidelines : What are hot int copies?

C++ Linux 多线程套接字问题

c++ - 有什么方法可以将 varargs 与 boost::format 一起使用吗?

c++ - 为什么我不能构造一个带有大括号括起来的初始化列表的 gsl::span

c++ - 是否可以仅在需要时缩小范围?