gsl :: span - 指向end的指针

时间:2018-02-16 04:42:45

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

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

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

我尝试了以下内容。

&(*str.cend())

我也尝试了以下内容。

&str[srcLen]

两者都会导致崩溃。

我可以尝试以下方法,但这只会引起我试图解决的警告。

str.data() + str.length()

我开始认为整个C ++核心指南和指南支持库都被认为不值得付出努力。这是我第二次遇到" gsl导致我试图在第一时间解决的确切警告"问题。

1 个答案:

答案 0 :(得分:2)

与大多数C ++库一样,

span旨在与接受模板迭代器的代码一起使用。您可以将begin/end传递给算法或其他容器,依此类推。

当你必须处理纯粹基于特定迭代器对(如指针)的接口时,这些API几乎不能正常工作。它与尝试获取指向std::vector结尾的指针没有什么不同;你迟早要做指针运算。

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