В s
существует пользовательский литеральный оператор , который выдает std::string
.
Разница между двумя строками заключается в том, что good
one - это string_view
, указывающий на строковый литерал, а строковые литералы имеют время жизни c (они сохраняются для всей проблемы). bad
- это string_view
, указывающий на временный string
, и этот временный владеет своими данными - поэтому, когда временный уничтожается (в конце строки), он забирает свои данные с собой, и мы в конечном итоге с bad
, указывающим на уничтоженную память.