Рубрики

Блок Catch и преобразование типов в C ++

Предсказать вывод следующей программы на C ++.

#include <iostream>

using namespace std;

  

int main()

{

    try

    {

        throw 'x';

    }

    catch(int x)

    {

        cout << " Caught int " << x;

    }

    catch(...)

    {

        cout << "Defaule catch block";

    }

}

 Defaule catch block

В вышеприведенной программе выдается символ 'x', и есть блок catch, чтобы поймать int. Можно подумать, что блок int catch может быть сопоставлен с учетом значения ASCII 'x'. Но такие преобразования не выполняются для блоков catch. Рассмотрим следующую программу в качестве другого примера, где конструктор преобразования не вызывается для брошенного объекта.

#include <iostream>

using namespace std;

  

class MyExcept1 {};

  

class MyExcept2

{

public:

  

    // Конструктор преобразования

    MyExcept2 (const MyExcept1 &e )

    {

        cout << "Conversion constructor called";

    }

};

  

int main()

{

    try

    {

        MyExcept1 myexp1;

        throw myexp1;

    }

    catch(MyExcept2 e2)

    {

        cout << "Caught MyExcept2 " << endl;

    }

    catch(...)

    {

        cout << " Defaule catch block " << endl;

    }

    return 0;

}

Defaule catch block

Напомним, что объекты производного типа преобразуются в базовый тип, когда создается производный объект и имеется блок catch для захвата базового типа. Смотрите этот GFact для более подробной информации.

Рекомендуемые посты:

Блок Catch и преобразование типов в C ++

0.00 (0%) 0 votes