Вот Я нашел это:
Все наследующие конструкторы […] по умолчанию являются 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;
}
Унаследованный конструктор также будет 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.
Других решений пока нет …