是否有通用方法可以找到任何以 null 结尾的字符串的长度?

Is there a generic way to find the length of any null-terminated string?

本文关键字:null 结尾 字符串 任何 方法 是否      更新时间:2023-10-16

我正在用 c++17 编写我自己的 Range 类,以允许迭代任何容器中任何范围的整数、字符或元素。我已经为容器、数组和整数编写了构造函数。现在我需要一个构造函数,它可以接受任何字符串指针类型(假定以 null 结尾(,并从中初始化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等。

手动完成并不难,但是标准库中有这样的东西吗?

编辑:阐明了构造函数不是为了处理整数,数组或容器的情况。

是的!我查了std::basic_string_view是如何做到的,它使用了std::char_traits<T>::length.这个函数从 c++17 开始就是 constexpr,所以构造函数可以保留它的 constexpr 说明符!

代码简单地变成:

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

std::char_traitscppreference.com