2013-07-22 5 views
1

Можно исключить типы типа int, float, long или custom data, такие как классы и структуры. Но какой тип данных нельзя исключить в C++?Какой тип данных нельзя исключить в программе C++

+4

Абстрактные типы, (указатели) неполных типов и типов без возможности использования конструктора копирования/перемещения. Я думаю, что это все. – jrok

+0

Вы можете бросать массивы, но они распадаются на указатель на их первый элемент. – jrok

ответ

3

Исключение не может бросок неполным типа:

§ 15,1

Если временный является Левое и используется для инициализации переменной с именем в обработчике согласования (15.3). Если тип объекта исключения будет неполным или указателем на неполный тип, отличный от (возможно, cv-qualified), то программа будет плохо сформирована. За исключением этих ограничений и ограничений на сопоставление типов, упомянутых в 15.3, операнд throw обрабатывается точно как аргумент функции в вызове (5.2.2) или операнде оператора return.

§ 15,5

Когда брошено объект является класс объекта, копия/конструктор двигаться и деструктор должен быть доступен, даже если операция копирования/перемещения опущена (12,8).

15.3.1 обрабатывающее исключение

за исключением декларирование в обработчике описывает тип (ы) исключений, которые могут вызвать этот обработчик для ввода. Объявление исключения не должно означать неполный тип или ссылочный тип rvalue. Объявление исключения не должно указывать указатель или ссылку на неполный тип, кроме void *, const void *, volatile void * или const volatile void *.

+0

15.1/5 также имеет значение. – jrok

+0

Спасибо jrok, вы должны сделать свой комментарий как ответ! – billz

Смежные вопросы