Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2011, 18:33   #1
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
Вопрос Типы вбрасываемых исключений

Вот, значит, участок кода:
Код:
int& operator[](int a) throw(std::string)
{
      if ( a >= 0 && a < size )
	return t[a];
      else throw "Range Error!";
}
На него Visual C++ 2010 говорит, что:
Цитата:
спецификация исключений C++ игнорируется, кроме случая, когда указывается, что функция не является __declspec(nothrow)
Как этого избежать, нашёл в MSDN( просто добавить #pragma warning( disable : 4290 ) ), но возник вопрос. Что такое вапше __declspec(nothrow)? На MSDN, ввиду того, что там статья на английском, не очень понятно.
_-Re@l-_ вне форума Ответить с цитированием
Старый 03.12.2011, 11:07   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
__declspec(nothrow)
Тут МСДН не нужно, все логически ясно: говорит, что эта функция не генерирует исключений
p51x вне форума Ответить с цитированием
Старый 03.12.2011, 11:58   #3
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Я имел ввиду, что такое вапше __declspec.
_-Re@l-_ вне форума Ответить с цитированием
Старый 03.12.2011, 15:12   #4
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

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

мне кажется вы пошли не в то русло, вам студия говорит что ей плевать на что вы поставили во throw(...) кроме случая "throw()". это чисто косяк студии (майкрософта) а вы его хотите перекрыть еще более жесткими спецификациями от майкрософта. просто оставьте етот варнинг в покое я щитаю.
onewho вне форума Ответить с цитированием
Старый 03.12.2011, 16:55   #5
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

Вообще лучше не создавать себе гемора со спецификацией исключений. В новом стандарте они вроде объявлены как deprecated. В boost-е их тоже не просто так не используют. Кстати у вас в коде не строка кидается в качестве исключения, а либо указатель на char, либо массив чаров. хз что именно. чтобы кинуть строку, нужно явно написать throw std::string("error description"); А еще для таких случаев как ваш есть стандартное исключение типа std:: out_of_range.
_Ч_ вне форума Ответить с цитированием
Старый 04.12.2011, 11:45   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
это чисто косяк студии (майкрософта)
я ж конечно пониманию, что поругать мелкософт святое дело, но не разобравшись...

Компиль просто честно сообщает, что у него не реализована проверка выбрасываемых исключений, т.е. функция может бросить и другие (кроме случая nothrow).
p51x вне форума Ответить с цитированием
Старый 04.12.2011, 14:14   #7
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

p51x, Ну я вообще-то MS люблю и сам юзаю их студии 2008 и 2010

Но всеж несоответствие стандартам -> косяк
onewho вне форума Ответить с цитированием
Старый 05.12.2011, 10:33   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

почему не соответствие?.. просто еще не доделали, там уже с++1х маячит )
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод исключений Blad47 Помощь студентам 5 21.04.2011 13:34
Обработка исключений Ckomoroh Общие вопросы Delphi 6 21.03.2011 08:52
Использование исключений Kasper1 Общие вопросы C/C++ 2 18.12.2010 23:11
обработка исключений scray PHP 3 15.05.2010 15:02