Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

08.11.2013, 01:34. Просмотров 724. Ответов 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?
Или вообще как понять все, что после списка параметров функции?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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++ библиотеку? а после запустить ее на Лабвью Код есть...

7
ct0r
Игогошка!
1777 / 679 / 42
Регистрация: 19.08.2012
Сообщений: 1,295
Завершенные тесты: 1
08.11.2013, 01:51 #2
Это значит, что функция swap для массивов не кидает исключения, если не кидает исключения функция swap для их элементов. Между прочим, отличная штука, в отличие от старых throw-спецификаций.
0
gromo
372 / 271 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
08.11.2013, 02:33  [ТС] #3
Цитата Сообщение от ct0r Посмотреть сообщение
Это значит, что функция swap для массивов не кидает исключения, если не кидает исключения функция swap для их элементов.
Ну получается, что вложенный noexcept возвратит true/false ?
0
ct0r
Игогошка!
1777 / 679 / 42
Регистрация: 19.08.2012
Сообщений: 1,295
Завершенные тесты: 1
08.11.2013, 03:11 #4
Цитата Сообщение от gromo Посмотреть сообщение
Ну получается, что вложенный noexcept возвратит true/false ?
По сути есть два типа noexcept - спецификация и оператор.
Спецификация - это просто noexcept(constexpr). Если constexpr true, то функция потенциально не может возбуждать исключения, а если false, то может.
Оператор - это noexcept(expression). Принимает выражение, которое однако на этапе компиляции не высчитывается. Компилятор просто смотрит на спецификации noexcept всех операций в этом выражении (но внутрь не идет), и если у них всех noexcept true, то возвращает true, иначе false.
1
gromo
372 / 271 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
08.11.2013, 09:32  [ТС] #5
ct0r, спецификация noexcept у функции по сути просто визуальная подсказка и расчитана на честность разработчика? Потому что если я укажу noexcept в спецификации функции, и сделаю throw something; вниутри этой функции то исключение все равно имеет место...
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 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.
1
DiffEreD
1431 / 768 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
08.11.2013, 11:45 #7
gromo, вот тут статью хорошую можно почитать: Что нового в работе с исключениями в C++11
1
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
08.11.2013, 11:52 #8
Вот еще на Хабре почитайте: Спецификатор времени компиляции noexcept в C++11
1
08.11.2013, 11:52
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; ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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