C++17
已经让我们string_view
优化我们在需要查看底层字符序列时不必要地分配内存的场景。智慧是你几乎总能用const std::string&
取代std::string_view
。请考虑以下示例:
char foo(const std::string& str)
{
return str[0];
}
以上是std::string
所有值的有效函数。但是,如果我们将其更改为:
char foo(std::string_view sv)
{
return sv[0];
}
我们已经为大小为0的字符串触发了未定义的行为! This最后有一个注释:
与std :: basic_string :: operator []不同,std :: basic_string_view :: operator [] (size())具有未定义的行为,而不是返回CharT()。
有谁知道为什么行为对于索引运算符来说是不协调的?
答案 0 :(得分:8)
区别在于std :: string保证NUL终止 - 视图不是。因此,std :: string在第0位始终具有有效值。
对于std :: string:
如果pos == size(),则返回对值为CharT()(空字符)的字符的引用。
http://en.cppreference.com/w/cpp/string/basic_string/operator_at