C ++标准委员会有机会使用string_view使代码更安全,但他们选择从basic_string添加隐式转换为basic_string_view。
如此有效,他们说的是这个
// No worries, everyone always reads the docs...
struct Foo{
string_view sv;
//I really want to make this constexpr
constexpr Foo(string_view sv):sv(sv){}
};
/* ...some Friday afternoon... */
string s{"Looks like it works"};
Foo f{s + "..."};
不如此重要
string f{"foo"};
string_view b{"bar"};
i_wonder(f == b);
//glad I didn't have to type static_cast<string_view>(f)!!
请告诉我,有更好的理由从basic_string隐式转换为basic_string_view。
最糟糕的是你需要string_view来利用constexpr(我知道,或者char * ......)
更新:此问题已被搁置,因为它不符合SO的指导原则。很公平。我认为这是需要强调的。我认为这是隐式转换是向后退一步。我开始看到人们(即使是非常有经验的人)也会写出悬挂指针,因为它就像90年代一样。
使用string_view的最佳做法是什么?WRT从所有者到非所有者的隐式转换风险?永恒的警惕不是一个答案。
我不得不说,我很惊讶这里的人们似乎很少关注类型安全。这是“现代”C ++的重复目标。
答案 0 :(得分:3)
请告诉我,从
basic_string
到basic_string_view
的隐式转换有更好的理由。
好吧,我们想:
string_view
而不是string
上工作的函数,以便不限制调用者关于如何存储字符串数据/拥有它的人 - 并且不必编写变体这些功能适用于string
s,char *
等string
传递给这些功能所以我们需要隐式转换。