Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поддерживает ли MSVC 2008 спецификацию исключений, у меня warning выдаёт, что - нет 
V
    Опции темы
zim22
Дата 5.4.2009, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: нет
Всего: 69



Сабж.

Код

void fcn(int) throw(std::runtime_error) { }

 warning C4290: C++ exception specification ignored except to indicate a function is not __declspec(nothrow)

А хуже всего то, что я явно указываю, что функция вообще не будет кидать exception. Но компилятор компилит, только ещё один warning выплёвывает:
 warning C4297: 'fcn2' : function assumed not to throw an exception but does

Код
void fcn2() throw()
{
 throw std::logic_error("fcn2 log.err");
}

int _tmain(int argc, _TCHAR* argv[])
{
  try {
  //fcn(10);
  fcn2();
  } catch(...) { std::cout << "catch"; }
    return 0;
}




Это сообщение отредактировал(а) zim22 - 5.4.2009, 11:17


--------------------
PM MAIL   Вверх
Lazin
Дата 5.4.2009, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 2
Всего: 154



Цитата(zim22 @  5.4.2009,  11:10 Найти цитируемый пост)
warning C4297: 'fcn2' : function assumed not to throw an exception but does

все правильно, он тебя предупреждает, что ты бросаешь исключение там где это делать нельзя

Цитата(zim22 @  5.4.2009,  11:10 Найти цитируемый пост)
warning C4290: C++ exception specification ignored except to indicate a function is not __declspec(nothrow)

в целях оптимизации, MSVC игнорирует все спецификации исключений кроме throw()
это не правиьно с точки зрения стандарта, но на практике как правило указывают только thrwo(), либо вообще не указывают, так что здесть нет проблемы smile 
PM MAIL Skype GTalk   Вверх
zim22
Дата 5.4.2009, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: нет
Всего: 69



Цитата(Lazin @  5.4.2009,  11:28 Найти цитируемый пост)
 так что здесть нет проблемы

а вот пример попроблемней.

Спецификация исключения виртуальной функции производного класса должна совпадать или быть более строгой, чем спецификация исключений соответствующей виртуальной функции базового класса.

MSVC и здесь нарушает стандарт....

Код
class Base {
public:
  virtual double f1(double) throw();
  virtual int f2(int) throw(std::logic_error);
  virtual std::string f3() throw(std::logic_error, std::runtime_error);
};
class Derived : public Base {
public:
  virtual double f1(double) throw(std::underflow_error); // error должен быть "по-хорошему". но всего лишь warning C4290
  virtual int f2(int) throw(std::logic_error);
  virtual std::string f3() throw();
};



Добавлено через 1 минуту и 49 секунд
Цитата(Lazin @  5.4.2009,  11:28 Найти цитируемый пост)
в целях оптимизации, MSVC игнорирует все спецификации исключений кроме throw()

ладно, я понял что студии на стандарт начхать...


--------------------
PM MAIL   Вверх
Earnest
Дата 5.4.2009, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(zim22 @  5.4.2009,  12:34 Найти цитируемый пост)
ладно, я понял что студии на стандарт начхать... 

На самом деле, спасибо ей за это. Спецификация исключений - весьма спорный момент в стандарте. Теоретически звучит здорово, но в практической жизни больше мешает (вроде бы у Мейерса в последних реинкарнациях его советов интересные рассуждения на этот счет). Ну на самом деле, как можно, проектируя базовый класс, знать, что никогда в жизни его наследникам не придется бросать исключений в override-методах? Ну и т.д. В общем, если придерживаться спецификации исключений, получается примерно то, что получилось с языком АДА: целью было создать язык, на котором сложно писать неверные программы. А получился язык, на котором вообще сложно писать.


--------------------
...
PM   Вверх
zim22
Дата 5.4.2009, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: нет
Всего: 69



Цитата(Earnest @  5.4.2009,  14:36 Найти цитируемый пост)
у Мейерса в последних реинкарнациях его советов

Мейерс новую книжку издал?



--------------------
PM MAIL   Вверх
Earnest
Дата 5.4.2009, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Уточняю: последних, котрые я читала. Не знаю, вроде нет, но реинкарнаций советов было по крайней мере 2. И они немного разные (советы) - концепции меняются на глазах.


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0517 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.