提问者:小点点

有没有一种通用的方法来查找任何以空结尾的字符串的长度?


我正在用C++17编写自己的Range类,以允许在任意容器中迭代任意范围的整数,字符或元素。 我需要一个构造函数,该构造函数可以接受任何指针类型(假定为空终止),并以此初始化M_startM_end迭代器。

这就是构造函数的样子:

template<typename T>
constexpr Range(T* p_string) noexcept :
    m_start{p_string},
    m_end{p_string + getLengthOfStringPointer(p_string)}
{}

我只需要实现泛型GetLengthOfStringPointer,它应该适用于任何类型和大小的const和非const字符; char16_twchar_tchar等等。

手动做起来没那么难,但是标准库里有这样的东西吗?


共1个答案

匿名用户

是的! 我查看了std::basic_string_view是如何执行的,它使用了std::char_traits::length

代码简单地变成:

template<typename T>
constexpr Range(T* p_string) noexcept :
    m_start{p_string},
    m_end{p_string + std::char_traits<T>::length(p_string)}
{}

cpPreference.com上的std::char_traits