Обоснование генерации статического типа?

Согласно FAQ по C ++ , когда бросается объект, он генерируется с использованием типа выражения static . Следовательно, если у вас есть:

catch ( some_exception const &e ) {
  // ...
  throw e; // throws static type, possibly causing "slicing"; should just "throw;" instead
}

и e - это на самом деле ссылка на некоторый класс, производный от some_exception , приведенный выше throw будет заставить объект "нарезаться" беззвучно. Да, я знаю, что правильный ответ - просто бросить; , но нынешнее положение вещей кажется ненужным источником путаницы и ошибок.

Что? в чем причина этого? Почему не вы хотите, чтобы он генерировался с помощью типа динамический объекта?

7
задан Fred Foo 20 April 2011 в 17:22
поделиться