Я знаю, что тривиальный std::string_view не обязательно будет завершаться нулем. Однако я не знаю, гарантированно литерал std::string_view будет завершаться нулем.
#include
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 рассматривается как вызов оператора формы «» sv(str, len); согласно 5.13 .5.14, str
завершается нулем.
Согласно 21.4.2.1, data() sv должно return str.
Могут ли они доказать, что «hello»sv. data() гарантированно завершается нулем по стандарту C++?
Я знаю, что тривиальный std::string_view не обязательно будет завершаться нулем. Однако я не знаю, гарантированно литерал std::string_view будет завершаться нулем.
Например:
[code]#include
using namespace std::literals;
int main() { auto my_sv = "hello"sv; } [/code]
[b]Гарантирует ли C++17 или более позднюю версию, что my_sv.data() завершается нулем?[/b] [b]=== Ниже обновлено ===[/b]
Все приведенное ниже взято из n4820:
[list] [*]Согласно 5.13.5.14, строковый литерал завершается нулем. [*]Согласно версии 5.13.8, определяемый пользователем строковый литерал состоит из строкового литерала и пользовательского суффикса. Скажем, «hello»sv, hello — это строковый литерал, sv — это суффикс. [*]Согласно 5.13.8.5, «hello»sv рассматривается как вызов оператора формы «» sv(str, len); согласно 5.13 .5.14, str завершается нулем. [*]Согласно 21.4.2.1, data() sv должно return str. [/list]
[b]Могут ли они доказать, что «hello»sv. data() гарантированно завершается нулем по стандарту C++?[/b]