Есть ли смысл объявлять удаленную функцию как noexcept?

Рассмотрим два возможных определения класса:

Выставка:

struct A
{
    A() = delete;
};

Выставка':

struct A
{
    A() noexcept = delete;
}

Есть ли смысл объявлять удаленную функцию как noexcept?

1 ответ

Решение

(Первоначально опубликовал это как комментарий, но рекомендуется опубликовать как ответ.)

Просто нет. Удаленная функция не может быть вызвана (или, в случае конструктора, использована для инициализации объекта), не говоря уже об исключении.

Редактировать:

HVD упоминается в комментариях ниже, что noexcept(f()) не звонит f(), Если конструктор класса A является deleteпотом noexcept(A()) не удастся скомпилировать, независимо от того, объявлен ли конструктор noexcept, Это (по существу) является следствием требования noexcept(expression) дать правильное выражение - и выражение A() для класса A Требуется действительный конструктор.

Revolver_Ocelot также правильно указывает, что перегрузка невозможна noexcept (т.е. невозможно иметь две функции с одной и той же сигнатурой, за исключением того, что одна noexcept а один нет) Итак, в рамках определения класса A, и то и другое A() = delete а также A() noexcept = delete оба имеют одинаковый эффект, т.е. класс A не имеющий конструктора без аргументов.

Другие вопросы по тегам