Форум программистов, компьютерный форум CyberForum.ru

noexcept возвращает значение? - C++

Восстановить пароль Регистрация
 
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
08.11.2013, 01:34     noexcept возвращает значение? #1
Прототип std::swap выглядит так:
C++ (Qt)
1
template <class T, size_t N> void swap(T (&a)[N], T (&b)[N])  noexcept (noexcept(swap(*a,*b)));
Получается, если элемент массива может возбудить исключение, то вложенный noexcept возвращает значение, приводимое к bool?
Или вообще как понять все, что после списка параметров функции?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2013, 01:34     noexcept возвращает значение?
Посмотрите здесь:

C++ this возвращает неправильное значение
C++ Функция get() не возвращает значение
Почему нужно noexcept? C++
C++ Метод не возвращает значение
Noexcept - рекомендации по применению C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ct0r
C++/Haskell
 Аватар для ct0r
1549 / 568 / 39
Регистрация: 19.08.2012
Сообщений: 1,174
Завершенные тесты: 1
08.11.2013, 01:51     noexcept возвращает значение? #2
Это значит, что функция swap для массивов не кидает исключения, если не кидает исключения функция swap для их элементов. Между прочим, отличная штука, в отличие от старых throw-спецификаций.
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
08.11.2013, 02:33  [ТС]     noexcept возвращает значение? #3
Цитата Сообщение от ct0r Посмотреть сообщение
Это значит, что функция swap для массивов не кидает исключения, если не кидает исключения функция swap для их элементов.
Ну получается, что вложенный noexcept возвратит true/false ?
ct0r
C++/Haskell
 Аватар для ct0r
1549 / 568 / 39
Регистрация: 19.08.2012
Сообщений: 1,174
Завершенные тесты: 1
08.11.2013, 03:11     noexcept возвращает значение? #4
Цитата Сообщение от gromo Посмотреть сообщение
Ну получается, что вложенный noexcept возвратит true/false ?
По сути есть два типа noexcept - спецификация и оператор.
Спецификация - это просто noexcept(constexpr). Если constexpr true, то функция потенциально не может возбуждать исключения, а если false, то может.
Оператор - это noexcept(expression). Принимает выражение, которое однако на этапе компиляции не высчитывается. Компилятор просто смотрит на спецификации noexcept всех операций в этом выражении (но внутрь не идет), и если у них всех noexcept true, то возвращает true, иначе false.
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
08.11.2013, 09:32  [ТС]     noexcept возвращает значение? #5
ct0r, спецификация noexcept у функции по сути просто визуальная подсказка и расчитана на честность разработчика? Потому что если я укажу noexcept в спецификации функции, и сделаю throw something; вниутри этой функции то исключение все равно имеет место...
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
08.11.2013, 10:07     noexcept возвращает значение? #6
gromo, Нет. Должен вызываться std::terminate, если из функции со спецификацией noexcept(true) вышел exception.

In some situations exception handling must be abandoned for less subtle error handling techniques.
when the search for a handler (15.3) encounters the outermost block of a function with a noexcept-
specification that does not allow the exception (15.4)

In such cases, std::terminate() is called (18.8.3). In
the situation where the search for a handler (15.3) encounters the outermost block of a function with a
noexcept-specification that does not allow the exception (15.4), it is implementation-defined whether the
stack is unwound, unwound partially, or not unwound at all before std::terminate() is called.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
08.11.2013, 11:45     noexcept возвращает значение? #7
gromo, вот тут статью хорошую можно почитать: Что нового в работе с исключениями в C++11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2013, 11:52     noexcept возвращает значение?
Еще ссылки по теме:

C++ Функция не возвращает значение
Подпрограмма не возвращает значение C++
Noexcept и throw() C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,917
Записей в блоге: 2
Завершенные тесты: 1
08.11.2013, 11:52     noexcept возвращает значение? #8
Вот еще на Хабре почитайте: Спецификатор времени компиляции noexcept в C++11
Yandex
Объявления
08.11.2013, 11:52     noexcept возвращает значение?
Ответ Создать тему

Метки
c++, exception, swap
Опции темы

Текущее время: 20:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru