![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
wowka19 |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 30.11.2011 Репутация: нет Всего: нет |
Использую VC2010 и G++4.8.
Этот код собирается только в VC2010:
В обоих собирается только если добавить throw() в метод what() и в деструктор:
1. Почему разное поведение? 2. Зачем throw() в деструкторе? ЕМНИП это указывает компилятору, что деструкторе исключений не будет, но их и так нельзя там выбрасывать. 3. Почему отсутствие throw() вообще мешает собрать код (только в G++)? throw() тоже является частью прототипа функции? Это сообщение отредактировал(а) wowka19 - 21.5.2015, 02:23 |
||||
|
|||||
Amp |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 3 Всего: 17 |
throw является частью сигнатуры, хотя и с некоторыми оговорками. Поведение разное вызвано разным объявлением класса std::exception в заголовочных файлах и тем, что реализация exception specification в VS не соответствовует стандарту. Но для C++11 это все уже deprecated, там методы вроде what() определяются через noexcept.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |