两者都是等价的,因为它们返回以null结尾的字符序列的长度。是否有理由选择彼此?
答案 0 :(得分:5)
使用更简单的替代方案。 std::char_traits::length
非常棒,但是对于C字符串,它确实相同并且代码更长。
帮自己一个忙,避免代码臃肿。我是C ++函数的忠实粉丝而不是C等价物(例如,我从不使用std::strcpy
或std::memcpy
,这是完全正常的std::copy
)。但是避免std::strlen
只是愚蠢。
仅使用C ++函数的一个原因是接口一致性:例如,std::strcpy
和std::memcpy
都有非常严重的接口。但是,std::strlen
是一个完美的C ++最佳传统算法。它没有概括,但是在标准库中找不到其他类特定的自由函数。
答案 1 :(得分:3)
std::strlen()
是来自C标准库的保留,仅在const char*
上运行(如果字符串未终止,则它具有未定义的行为是不安全的)。如果字符串使用宽字符集(例如const unsigned short*
),则std::strlen()
无用。
std::char_traits<T>::length()
将对T
类型的任何内容进行操作(例如,如果它是unsigned short
,它仍将正常运行,但也需要空终止值 - 这是最后一个value必须为T(0)
- 如果传递给它的T
数组未终止,则行为也是未定义的。)
通常,在处理字符串时,最好使用std::string::length()
而不是使用C风格的字符串。
答案 2 :(得分:0)
Zack Howland和Konrad Rudolph都有一个观点。谢谢。我接受这两个答案。总结的答复是: 对于较短的代码或C ++标准库,似乎没有任何个人偏好(我省略了概括,因为从标题中可以看出它不是问题的重点)。
答案 3 :(得分:-2)
std::strlen()
是C标准库兼容性(即使它是ISO C ++的一部分)函数,它将const char*
作为参数。 length()
是std::string
类系列的一种方法。因此,如果您想在strlen()
上使用std::string
,则必须写:
strlen(mystring.c_str())
比mystr.length()
更整洁。除此之外,应该没有明显的区别(对于char
类型,那就是)。