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

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

Выставка:

struct A
{
A() = delete;
};

Выставка’:

struct A
{
A() noexcept = delete;
}

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

7

Решение

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

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

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

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

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

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]