Rap*_*ptz 13
它是否包括长度
是.它是C++ 11标准所要求的.
§21.4.4
size_type size() const noexcept;
1. 返回:当前字符串中类似char的对象数的计数.
2. 复杂性:恒定时间.
但请注意,这不知道unicode.
它是否为空终止
是.C++ 11标准还要求std::basic_string::c_str返回有效的指针,其范围为[0,size()],其中my_string[my_string.size()]有效,因此为空字符.
§21.4.7.1
const charT* c_str() const noexcept;
const charT* data() const noexcept;
1. 返回:一个指针p,p + i == &operator[](i)用于每个iin[0,size()].
2. 复杂性:恒定时间.
3. 要求:程序不得更改存储在字符数组中的任何值.
小智 10
我们不知道.这完全取决于实施.(至少直到C++ 03 - 显然C++ 11要求内部缓冲区以0结尾.)如果你使用的是开源,你可以查看C++标准库实现的源代码.
除此之外,我发现它是合乎逻辑的,如果它是NUL终止的,它也存储了一个明确的长度.这很好,因为它需要恒定的时间来返回长度 和有效的C字符串:
size_t length()
{
return m_length;
}
const wchar_t *c_str()
{
return m_cstr;
}
Run Code Online (Sandbox Code Playgroud)
如果它没有存储明确的长度,则size()必须将字符计数到NULin O(n),如果你可以避免它,这是浪费的.
但是,如果内部缓冲区不是NUL终止的,但它只存储了长度,那么创建一个正确的NUL终止的C字符串将非常繁琐:字符串必须重新分配其存储并附加0(并且重新分配是一项昂贵的操作),或者它必须复制整个缓冲区,这也是一个O(n)操作.
(警告:无耻的自我推销 - 在我正在进行的C语言项目中,我采用了这种方法来实现灵活的字符串对象.)
| 归档时间: |
|
| 查看次数: |
3349 次 |
| 最近记录: |