есть ли какие-то адекватные методы обхода?
Почему UB?)
При раскрытии тернарника будет выведен общий тип string. В случае ложного условия создастся временный объект string из литерала, им проинициализируется string_view, после чего временный объект радостно помрёт.
А разве argc бывает 0?
Та не важно, это просто пример, можно false написать (главное, чтобы не соптимизирвоало).
Я тоже подумал про оптимизацию... Но как минимум код примера - в любом случае не UB, ибо строка живет до конца полного выражения :)
Я не знаю что было в оригинале, но сейчас кажется что string_view будет ссылаться на литерал и поэтому все ок.
К сожалению, он будет ссылаться на уничтоженный временный объект. По крайней мере я это так вижу. Если я не прав — с радостью послушаю.
А это тоже ub? const char* s = "hello";
Нет, тут указатель и всё отлично. :)
string_view хранит указатель и длину. В чем разница?
В типе, которым инициализируется string_view.
Обсуждают сегодня