除了std :: string_view方法之外,std :: string_view对char*有什么好处吗?

use*_*683 2 c++ refactoring c-strings string-view c++17

除了std :: string_view方法之外,std :: string_view对char*有什么好处吗?

是否有任何理由要重新因数char*string_view如果没有string_view将用于的方法呢?

Yak*_*ont 7

A char*只是指向角色的指针.要将它解释为字符串,您需要一个长度,显式(pascal字符串将其存储在第一个字符之前,或者您可以将长度信息作为另一个参数或结构成员传递),或者隐式(null终止).

字符串视图是上述第二个的抽象.与1st或3rd不同,它不需要与字符串缓冲区连续的数据来包含长度信息.这意味着您可以在O(1)时间内创建非拥有子字符串而无需复制,这是其他两种方法无法做到的.

确定上述第一和第二种情况的字符串长度是O(1)和O(n),用于空终止.这很重要.

字符串视图与一对char*char*与长度配对没有任何基本优势; 与那些相比,你获得的就是实用方法.但它与空终止的char缓冲区根本不同.

  • 或者简单地说,`char*` 是一个迭代器;`string_view` 是一个*范围*。 (2认同)