170 похожих чатов

Https://Godbolt.Org/Z/V693zb9Md Как думаете, это нормально, что такой код — UB? И

есть ли какие-то адекватные методы обхода?

14 ответов

8 просмотров

Почему UB?)

Alexander "Ternvein"-Isaev Автор вопроса
Dmitriy [Отпуск]
Почему UB?)

При раскрытии тернарника будет выведен общий тип string. В случае ложного условия создастся временный объект string из литерала, им проинициализируется string_view, после чего временный объект радостно помрёт.

Alexander "Ternvein"-Isaev Автор вопроса
Dmitriy [Отпуск]
А разве argc бывает 0?

Та не важно, это просто пример, можно false написать (главное, чтобы не соптимизирвоало).

Alexander "Ternvein" Isaev
Та не важно, это просто пример, можно false написа...

Я тоже подумал про оптимизацию... Но как минимум код примера - в любом случае не UB, ибо строка живет до конца полного выражения :)

Alexander "Ternvein" Isaev
Исправил.

Я не знаю что было в оригинале, но сейчас кажется что string_view будет ссылаться на литерал и поэтому все ок.

Alexander "Ternvein"-Isaev Автор вопроса
magras
Я не знаю что было в оригинале, но сейчас кажется ...

К сожалению, он будет ссылаться на уничтоженный временный объект. По крайней мере я это так вижу. Если я не прав — с радостью послушаю.

Alexander "Ternvein"-Isaev Автор вопроса
magras
А это тоже ub? const char* s = "hello";

Нет, тут указатель и всё отлично. :)

Alexander "Ternvein" Isaev
Нет, тут указатель и всё отлично. :)

string_view хранит указатель и длину. В чем разница?

Alexander "Ternvein"-Isaev Автор вопроса
magras
string_view хранит указатель и длину. В чем разниц...

В типе, которым инициализируется string_view.

Похожие вопросы

Обсуждают сегодня

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
читать файл максимально быстро? странный вопрос))
zamtmn
53
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
How to create an OS in C? what to study?
Linus
18
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
а как бы вылезти из ИО, что то типа IO -> Ether или в какую сторону смотреть ? что то туплю
Fedor
14
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
Карта сайта