Излучение сообщения при достижении STD :: Unreachable () в выпуске сборкиC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Излучение сообщения при достижении STD :: Unreachable () в выпуске сборки

Сообщение Anonymous »

Я знаю, когда вы вводите std :: unreachable () в вашем коде вы гарантируете, что код никогда не достигнет этой точки, и если он это сделает, это UB (все идет). В сборках отладки я заметил, что есть исключение, которое приятно для обнаружения ошибок. Мой вопрос: давайте просто скажем, что мы переключаемся на сборку релиза, и у вас есть std :: unreachable () в вашем коде, как: < /p>

Код: Выделить всё

switch(x)
{
case 1: return 1;
case 2: return 2;
default: std::unreachable();
}
< /code>
Затем, когда вы запускаете в режиме выпуска, если он достигает этой точки, то это UB, но если это не так, нет способа выяснить, что пошло не так, верно? Я имею в виду, я не могу сделать: < /p>
default: /* LOG MY ERROR */; std::unreachable();
< /code>
или: < /p>
default: /* LOG MY ERROR AND TERMINATE */; std::unreachable();
Потому что я гарантировал компилятору, что весь код после случая по умолчанию не может быть достигнут, и там это UB (журнал или излучение сообщения, которое я имею в виду)? Я не могу сделать оба? Так что, если он достигнет «точки», войдите в систему ошибки и прекращайте, но все же иметь преимущества оптимизации, сказав компилятору, что это никогда не должно быть достигнуто?

Подробнее здесь: https://stackoverflow.com/questions/796 ... ase-builds
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»