gsl::span - 指向结束的指针
gsl::span - pointer to end
我需要将 gsl::span 传递给一个函数,该函数需要一个指向开始的指针和一个指向结束的指针。我更新了函数以使用 gsl::span 以避免出现不使用指针算术警告。那么如何让指针指向末尾呢?
我正在尝试呼叫 std::ctype::widen。我用了什么神奇的咒语来获取 std::ctype::widen 函数的结束参数的值?
我尝试了以下方法。
&(*str.cend())
我也尝试了以下方法。
&str[srcLen]
两者都会导致崩溃。
我可以尝试以下操作,但这只会导致我一开始试图解决的警告。
str.data() + str.length()
我开始认为整个 C++ 核心指南和指南支持库的想法太差,不值得付出努力。这是我第二次遇到 "gsl causes the exact warning I was trying to resolve in the first place" 问题。
span
与大多数 C++ 库一样,旨在与接受模板迭代器的代码一起使用。您可以将 begin/end
传递给算法或其他容器等。
当您必须处理纯粹基于特定迭代器对(如指针)的接口时,此类 API 几乎无法正常工作。这与尝试获取指向 std::vector
末尾的指针没有什么不同;你迟早要进行指针运算。
但是如果您对有关指针算法的警告感到恼火,请尝试使用 std::next(str.data(), str.size())
来计算结束指针。静态分析工具可能会抱怨这一点,但它确实不应该。
我需要将 gsl::span 传递给一个函数,该函数需要一个指向开始的指针和一个指向结束的指针。我更新了函数以使用 gsl::span 以避免出现不使用指针算术警告。那么如何让指针指向末尾呢?
我正在尝试呼叫 std::ctype::widen。我用了什么神奇的咒语来获取 std::ctype::widen 函数的结束参数的值?
我尝试了以下方法。
&(*str.cend())
我也尝试了以下方法。
&str[srcLen]
两者都会导致崩溃。
我可以尝试以下操作,但这只会导致我一开始试图解决的警告。
str.data() + str.length()
我开始认为整个 C++ 核心指南和指南支持库的想法太差,不值得付出努力。这是我第二次遇到 "gsl causes the exact warning I was trying to resolve in the first place" 问题。
span
与大多数 C++ 库一样,旨在与接受模板迭代器的代码一起使用。您可以将 begin/end
传递给算法或其他容器等。
当您必须处理纯粹基于特定迭代器对(如指针)的接口时,此类 API 几乎无法正常工作。这与尝试获取指向 std::vector
末尾的指针没有什么不同;你迟早要进行指针运算。
但是如果您对有关指针算法的警告感到恼火,请尝试使用 std::next(str.data(), str.size())
来计算结束指针。静态分析工具可能会抱怨这一点,但它确实不应该。