Может ли объявление типов POD генерировать исключение?

Когда я объявляю condition_variable, это может бросить std::system_error,

Но как насчет того, когда я объявляю тип POD (например, int, double или же float)?

Как код ниже:

int main()
{
//do something
int i;    //will here throw exception?
}

Если объявление типа POD может вызвать исключение, как я могу гарантировать

void test() noexcept
{
//do something
int i;
}

является noexcept?

1

Решение

Но как насчет объявления фундаментального типа (например, int, double или float)?

декларирование Тип POD объекты не будут вызывать исключение.

Конструкторы не POD-типов могут генерировать исключения. Только документы / исходный код этих типов могут помочь вам понять, произойдет ли это для определенного типа.

2

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

Это конструктор из std::condition_variable это может бросить исключение. Примитивные типы, такие как int а также double не имеют конструкторов. У них просто есть некоторое стековое пространство, выделенное для них, и все, плюс записываемое значение, если вы инициализируете переменную. Единственный способ, которым это может вызвать исключение, — это переполнение стека и непредвиденное поведение, приводящее к выбросу.

0

Типы POD обычно инициализируются с помощью выражений инициализатора вместо конструкторов. Как и конструкторы, инициализаторы могут генерировать исключения. Но если у вас нет ни конструктора, ни инициализатора, нет кода, связанного с определением, и, следовательно, также нет возможности для этого кода выбросить.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector