Брутально и бессердечно о программировании и проектировании
ГлавнаяФорумАртПаттерныАнтипаттерныЗаметкиВопрос-ответКнигорецензииСправочная

21. Преобразования типов и исключения

Какие преобразования типов возможны в момент перехвата исключения? Что мы увидим на экране?
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include <string>

class A
{
};

class B
{
public:

    B()
    {
    }

    B(A const&)
    {
    }

    operator A()
    {
        return A();
    }
};

template <class throw_type, class catch_type>
void throw_catch(throw_type trw = throw_type())
{
    try
    {
        throw trw;
    }
    catch(catch_type)
    {
        std::cout << typeid(catch_type).name() << std::endl;
    }
    catch(throw_type)
    {
        std::cout << typeid(throw_type).name() << std::endl;
    }
}

int main()
{
    throw_catch <char*, void*> ();
    throw_catch <void*, char*> ();

    throw_catch <char*, void const*> ();
    throw_catch <char const*, void*> ();

    throw_catch <char*, void volatile*> ();
    throw_catch <char volatile*, void*> ();

    throw_catch <char, int> ();
    throw_catch <int, char> ();

    throw_catch <A, B> ();
    throw_catch <B, A> ();

    throw_catch <char const*, std::string> ("Hello");

    return 0;
}
Компилировать в Comeau
Правильный ответ.
В момент перехвата исключения возможны следующие преобразования: срезка, приведение ссылок и указателей вверх по иерархии классов (если такое приведение однозначно), приведение указателей к void* или void const*, а также ограничивающие преобразования, такие как добавление const или volatile. Все остальные преобразования, которые могут быть выполнены неявно при обычном присваивании, в момент перехвата исключения не допускаются. В этот раз на консоли вы увидите следующее:

void *
void *
void const *
char const *
void volatile *
char volatile *
char
int
class A
class B
char const *

Оглавление
Статистика
© 2007—2009 Inside C++ Коммерческие услугиКонтактная информация

. Агенство рекламы. Оптимизация сайтов! Размещение рекламы.. лучший платный хостинг телефон. volkswagen golf 3, volkswagen multivan. В ЗАО офисный переезд выгодно. Высококачественная тонировка стекол автомобиля пленкой. проститутки москвы это девушки сильно смазливые