【发布时间】:2019-07-29 09:02:53
【问题描述】:
我知道琐碎的std::string_view 不能保证以空值结尾。但是,我不知道 std::string_view 文字是否保证以空值结尾。
例如:
#include <string_view>
using namespace std::literals;
int main()
{
auto my_sv = "hello"sv;
}
C++17 或更高版本是否保证my_sv.data() 以空值结尾?
=== 下面更新===
以下均来自n4820:
- 根据 5.13.5.14,字符串文字以空值结尾。
- 根据 5.13.8,用户定义的字符串文字由字符串文字加上自定义后缀组成。比如说,
"hello"sv,hello是字符串文字,sv是后缀。- 根据 5.13.8.5,
"hello"sv被视为operator "" sv(str, len);形式的调用,根据 5.13.5.14,str是 空终止。- 根据 21.4.2.1,
sv的data()必须返回str。
他们能否证明 "hello"sv.data() 被 C++ 标准保证为空终止?
【问题讨论】:
-
在此站点上,使用答案上的绿色复选标记表示“已解决”;没有这样的复选标记表示“未解决”。您不应该在标题中写“已解决”等
-
string_view是一个类。类不是以空值结尾的。准确解释您要问的问题会改善问题(也许提供一个代码示例来演示您所询问的案例的 string_view 用法) -
@M.M OP 在问什么不是很清楚吗?你认为像those 这样添加几行代码会有好处吗?
-
@M.M
sv[sv.size()]是 UB,sv.data()[sv.size()]不一定是 UB——但应该会引起紧张。我也不清楚 OP 询问的是哪一个。 -
@M.M 所以这个问题可以改写成类似“给定
auto my_sv = "hello"sv;,C++17 或更高版本是否保证my_sv.data()是空终止的?”
标签: c++ string c++17 standards string-view