- 主题:一个简单的例子说明string_view的好处
这东西挺危险的,明明是个引用,语法上却像个值对象。用的人可能注意不到它可能失效。
【 在 here080 的大作中提到: 】
: 在以下代码里,除了最后赋值给成员变量,中间所有步骤都无须拷贝
: =================================================================
: class Person {
: ...................
--
FROM 114.86.95.*
你无法阻止被调用者把它传到外面。这一点上它和char*确实一样危险,但char*无论定义还是使用的语法都明显是个指针,而string_view太像string。
C++里常见的看着像值对象,而实际是引用的,好像就weak_ptr和iterator,但前者自带防止失效的机制,而且两者使用时的语法都像指针。
不过问题也不止这一个,现在ranges & views又来了。
【 在 here080 的大作中提到: 】
: 并不比c string更危险。
: 无脑作为函数参数使用是完全安全的。
--
FROM 58.37.63.*
我觉得吧,要么像rust那样编译器保证ref不会跑出作用域;要么像大部分语言用gc。
两个都没有,那C++里最好ref从语法上一看就是ref,无论定义还是使用。从这个角度引用就不如指针。
从这个角度你可以string_view,但是如果它像iterator一样通过*,->访问的话,可能比现在这样用法特别像string好一些。
当然也有反方面意见:如果养成靠语法来识别ref的习惯,可能也挺危险的,不可靠。
【 在 vonNeumann 的大作中提到: 】
: C++98 就允许 basic_string 使用 COW,C++11 好不容易禁止了,又改回去?
: 再说 COW 也解决不了无 copy 引用字符串常量、无 copy 引用字符串的子串,这两个场景才是 string_view 的重点。
: 标准库没有 string_view 的时候,一大把 C++ 库都自己造了一个 StringRef/StringPiece/StringView,这个需求是真实存在的。
: ...................
--
修改:ilovecpp FROM 101.82.163.*
FROM 101.82.163.*