У нас есть класс, который реализует IUnknown (или любой интерфейс, которым мы не владеем). Мы начали помечать большинство/все наши методы словом noexcept для любой потенциальной оптимизации, так как мы все равно не выбрасываем никаких исключений; хотя некоторые из библиотек, от которых мы зависим, могут. Был поднят вопрос о том, должен ли QueryInterface/AddRef/Release быть помечен как noexcept, поскольку интерфейс не помечен.
Есть ли какие-либо побочные эффекты или ошибки, когда только некоторые из производных классов помечены как noexcept?
noexcept
не является бесплатным. Не лучшая идея набрасывать на него все функции. Цена в том, что вы не можете снять его после того, как надели. Другойnoexcept
код может полагаться наnoexcept
вашей функции, поэтому для обратной совместимости вы застряли. Это означает, что вы никогда не сможете изменить реализацию на что-то, что может выдать ошибку. Добавлениеnoexcept
— это улица с односторонним движением, безопасно добавлять (если это правильно), но небезопасно удалять. Вы должны быть уверены, что функция по своей сути никогда не может бросить вызов. - person François Andrieux   schedule 23.10.2018