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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
#1

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

08.11.2013, 01:34. Просмотров 699. Ответов 7

Прототип 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++):

Noexcept и throw() - C++
здравствуйте, подскажите, в каких случаях нужно использовать noexcept за исключением деструкторов и swap?

Почему нужно noexcept? - C++
Здравствуйте. Сразу код :) : class logic_error_ext : public std::exception { private: std::string mesg; bool type; //if...

Noexcept - рекомендации по применению - C++
У меня вопрос - есть ли какие то правила по применению этого ключевого слова на практике? Когда стоит пользоваться, а когда нет? Из всего...

Ключевое слово noexcept - C++
Прочитал про noexcept и понял, что его нужно использовать для тех методов, которые не бросают исключение, что бы компилятор не генерировал...

Оператор noexcept и перегруженные методы класса - C++
Всем привет Как проверить с помощью noexcept, кидает ли исключение нужный мне перегруженный метод? #include &lt;iostream&gt; #include...

Не возвращает значение - C++
Здравствуйте! Помогите люди добрые?) Вообщем, нужно написать на Visual C++ библиотеку? а после запустить ее на Лабвью Код есть...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ct0r
Игогошка!
1770 / 672 / 42
Регистрация: 19.08.2012
Сообщений: 1,284
Завершенные тесты: 1
08.11.2013, 01:51 #2
Это значит, что функция swap для массивов не кидает исключения, если не кидает исключения функция swap для их элементов. Между прочим, отличная штука, в отличие от старых throw-спецификаций.
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
08.11.2013, 02:33  [ТС] #3
Цитата Сообщение от ct0r Посмотреть сообщение
Это значит, что функция swap для массивов не кидает исключения, если не кидает исключения функция swap для их элементов.
Ну получается, что вложенный noexcept возвратит true/false ?
ct0r
Игогошка!
1770 / 672 / 42
Регистрация: 19.08.2012
Сообщений: 1,284
Завершенные тесты: 1
08.11.2013, 03:11 #4
Цитата Сообщение от gromo Посмотреть сообщение
Ну получается, что вложенный noexcept возвратит true/false ?
По сути есть два типа noexcept - спецификация и оператор.
Спецификация - это просто noexcept(constexpr). Если constexpr true, то функция потенциально не может возбуждать исключения, а если false, то может.
Оператор - это noexcept(expression). Принимает выражение, которое однако на этапе компиляции не высчитывается. Компилятор просто смотрит на спецификации noexcept всех операций в этом выражении (но внутрь не идет), и если у них всех noexcept true, то возвращает true, иначе false.
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
08.11.2013, 09:32  [ТС] #5
ct0r, спецификация noexcept у функции по сути просто визуальная подсказка и расчитана на честность разработчика? Потому что если я укажу noexcept в спецификации функции, и сделаю throw something; вниутри этой функции то исключение все равно имеет место...
ForEveR
В астрале
Эксперт С++
7971 / 4733 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
08.11.2013, 10:07 #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
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
08.11.2013, 11:45 #7
gromo, вот тут статью хорошую можно почитать: Что нового в работе с исключениями в C++11
Croessmah
Модератор
Эксперт CЭксперт С++
13154 / 7417 / 831
Регистрация: 27.09.2012
Сообщений: 18,254
Записей в блоге: 3
Завершенные тесты: 1
08.11.2013, 11:52 #8
Вот еще на Хабре почитайте: Спецификатор времени компиляции noexcept в C++11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2013, 11:52
Привет! Вот еще темы с ответами:

Функция get() не возвращает значение - C++
Есть класс, в котором определен объект типа SDL_Surface*. Пытаюсь передать его в сторонний класс с помощью метода getScreen(), но он по...

Функция не возвращает значение - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int ca(int a) { int i,r; r = 0; ...

Функция не возвращает значение - C++
Функция ничего не возвращает: int Return(int s) { return s; } Передаю в аргумент S целочисленную переменную, но результата в...

Функция не возвращает значение - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; #include &quot;stdafx.h&quot; using namespace std; const int max_size = 100; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.11.2013, 11:52
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru