2016-08-09 3 views
6

Я новичок в C++, поэтому извините за то, что задал очень глупые вопросы, но меня путают с инструкциями throw в Механизме обработки исключений C++.Confused with C++ Exception throw statement

  • В приведенном ниже коде, почему мы вызываем функцию с именем, соответствующим названию класса ?
  • Это конструктор?
  • Создает ли экземпляр class Except?

Я не понимая синтаксис там.

class A 
{ 
public: 
    class Except{}; 
    void foo() { throw Except(); } 
}; 

int main() 
{ 
    A a; 
    try 
    { 
    a.foo();  
    } 
    catch(Except E)//exception handler 
    { 
    cout << "Catched exception" << endl;  
    } 
} 
+1

Да, он создает экземпляр 'Except', используя конструктор по умолчанию, который не принимает аргументов. – CoryKramer

+7

Как вы учитесь; catch исключение по ссылке const, например 'catch (const Except & E)' –

ответ

5

Является ли это конструктор?

Да.

Создает ли экземпляр класса Except?

Да еще. Оба эти утверждения верны.

classname(arguments) 

Где classname это имя класса создает экземпляр этого класса, передавая любой дополнительный arguments к соответствующему конструктору класса.

И, конечно, конструкторы - это методы класса, имена которых совпадают с именами классов. Вот почему оба вопроса имеют один и тот же ответ «да».

Это создает временный экземпляр класса. Обычно classname используется для объявления переменной, представляющей экземпляр этого класса, но этот синтаксис создает временный экземпляр класса, который уничтожается в конце выражения (обычно). Если все, что нужно, - передать экземпляр класса другой функции, отдельная переменная не нужна (бросание исключения также попадает в эту категорию).

+0

Хорошо получилось ... спасибо за подтверждение. – user2746926