c – 为什么string_view而不是generalized container_view?

我发现来自新C 17标准的string_view有点多余.

我们有一个相当详细的passing data to callee简单机制的集合,没有太多的开销,现在有另一个,也只是一个容器类型.

我不明白为什么提供这种机器只用于字符串,而不是一些更广泛的类型的其他容器.一个明智的答案是我们已经有了这些解决方案.例如在C++17 and beyond演示文稿string_view被解释为observer_ptr< T> (或T *)为字符串.

请注意反对更一般的container_view的参数,与C 17引入的string_view相反.

解决方法

广义的container_view更适合称为范围.我们有一个完全符合范围概念的TS路线.

现在,我们将string_view作为一个单独的类型,因为它具有专门的,特定于字符串的接口来匹配basic_string的字符串特定的接口.或者至少要匹配const /非分配接口.

请注意,container_view或任何您称之为无法擦除与生成它的容器的连接.或者至少不是在每个访问/操作上都不支付类型擦除开销.

相比之下,string_view基于const char * s和整数.那个课不关心字符串来自哪里;它提供了一个连续的字符数组的视图,无论谁拥有它.它可以做到这一点,因为它知道源是一个连续的数组,因此使用指针作为它的迭代器的核心.

你不能为任意容器这样做.您的container_view< vector>将有来自container_view< list>的不同迭代器管他呢.它必须这意味着如果您将container_view作为函数参数,则必须选择要使用的特定容器(强制用户准确提供该容器类型),使您的函数成为模板,或者使用类型删除的迭代器范围(因此比较慢).

还有关于GSL类型跨度和string_span的C-17后提议.前者表示(可能是多维)连续阵列的可修改的“视图”.后者表示连续字符串的可修改的“视图”.

相关文章

对象的传值与返回说起函数,就不免要谈谈函数的参数和返回值...
从实现装饰者模式中思考C++指针和引用的选择最近在看...
关于vtordisp知多少?我相信不少人看到这篇文章,多半是来自...
那些陌生的C++关键字学过程序语言的人相信对关键字并...
命令行下的树形打印最近在处理代码分析问题时,需要将代码的...
虚函数与虚继承寻踪封装、继承、多态是面向对象语言的三大特...