是否有通用方法可以找到任何以 null 结尾的字符串的长度?
Is there a generic way to find the length of any null-terminated string?
我正在用 c++17 编写我自己的 Range 类,以允许迭代任何容器中任何范围的整数、字符或元素。我已经为容器、数组和整数编写了构造函数。现在我需要一个构造函数,它可以接受任何字符串指针类型(假定以 null 结尾(,并从中初始化m_start
和m_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_t
、wchar_t
、char
等。
手动完成并不难,但是标准库中有这样的东西吗?
编辑:阐明了构造函数不是为了处理整数,数组或容器的情况。
是的!我查了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_traits
cppreference.com
相关文章:
- 是否有通用方法可以找到任何以 null 结尾的字符串的长度?
- 将以 null 结尾的字节字符串转换为原始字符串文本
- 在只读方案中,何时需要以 null 结尾的字符串?
- C++ - 创建具有相同字符的特定大小的以 null 结尾的 c 样式字符串的更好方法
- 以 Null 结尾的字符串的"NULL"或" "符号是否存储在文件中?
- std::string 的 c_str() 函数如何返回以 null 结尾的字符串?
- 为 C 绑定创建动态以 null 结尾的参数
- 从 getline() 返回以 null 结尾的字符串
- 为什么strlen()比手动循环检查以null结尾的字符快20倍
- WString 实现 - 返回以 null 结尾,我走的路是否正确
- std::string::c_str() 是否总是返回一个以 null 结尾的字符串
- 如何生成一个以非null结尾的c字符串
- 将以null结尾的char数组复制到符合缓冲区长度的std::字符串中
- C++将 char 复制到 char 数组(调试断言失败)时,字符串不是以 null 结尾的
- 字符串不以null结尾
- C/C++中以null结尾的字符串的长度
- C++ 中以 null 结尾的非空字符数组
- UTF-8 字符串的简单加密,其中结果为以 NULL 结尾的字符串
- 将以null结尾的字符串列表从外部函数返回到.NET中
- 字符串对象和以 null 结尾的字符数组之间的差异