Являются ли наследующие конструкторы noexcept (true) по умолчанию?

Вот Я нашел это:

Все наследующие конструкторы […] по умолчанию являются noexcept (true), если только они не обязаны вызывать функцию noexcept (false), и в этом случае эти функции noexcept (false).

Означает ли это, что в следующем примере унаследованный конструктор noexcept(true)хотя он был явно определен как noexcept(false) в базовом классе, или это считается для себя как функция, которая не является исключением (ложь) быть названным?

struct Base {
Base() noexcept(false) { }
};

struct Derived: public Base {
using Base::Base;
};

int main() {
Derived d;
}

4

Решение

Унаследованный конструктор также будет noexcept(false) потому что, как вы цитировали унаследованный конструктор будет noexcept(true) по умолчанию

если они не обязаны вызывать функцию noexcept (false)

Когда Derived конструктор запускает это также вызовет Base конструктор, который noexcept(false), Следовательно Derived конструктор также будет noexcept(false),

Об этом свидетельствует следующее.

#include <iostream>

struct Base {
Base() noexcept(false) { }
};

struct Derived: public Base {
using Base::Base;
};

int main() {
std::cout << noexcept(Derived());
}

Выходы 0.

3

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

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

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