Читать «Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14» онлайн - страница 223

Скотт Мейерс

1

Русский перевод — Александреску Андрей. Современное проектирование на С++. — М.: Издательский дом “Вильямс”, 2002.

2

Возможен и более гибкий дизайн, который позволяет вызывающим функциям определить, должны ли использоваться круглые или фигурные скобки в функциях, генерируемых из шаблонов. Подробности можно найти в записи от 5 июня 2013 года в Andrzej's С++ blog, “Intuitive interface — Part I”.

3

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

4

Применение ключевого слова final к виртуальной функции препятствует перекрытию этой функции в производном классе. Ключевое слово final также может быть применено к классу; в этом случае класс становится неприменимым в качестве базового.

5

“As if rule” — правило, согласно которому разрешены любые преобразования кода, не изменяющие наблюдаемое поведение программы. — Примеч. ред.

6

Обычно в русскоязычной литературе для термина stack unwinding используется перевод “разворачивание стека”. Однако это не совсем верный перевод. Вот что в переписке с редактором книги пишет по этому поводу профессор университета Иннополис E. Зуев: “Самый частый вариант перевода — «раскрутка стека» — не просто затемняет существо дела, но просто-таки противоположен ему. При срабатывании исключения начинается процесс поиска в стеке секции (“кадра стека”, stack frame), для которой задан перехват случившегося исключения. В тексте исходной программы такой секции соответствует try-блок с catch-обработчиком, в котором задано имя случившегося исключения. И в процессе этого поиска все секции стека, для которых такой перехват не задан, из стека удаляются. Говорят еще, что производится поиск секции по всей динамической цепочке вызовов. Тем самым стек в целом сокращается, сворачивается. Таким образом, самый адекватный вариант перевода — сворачивание стека”. Поэтому принято решение переводить stack unwinding как сворачивание стека. — Примеч. ред.

7

Проверка обычно выполняется окольным путем. Функции наподобие std::vector::push_back вызывают шаблон std::move_if_noexcept, вариацию шаблона std::move, который условно выполняет приведение к rvalue (см. раздел 5.1), в зависимости от того, объявлен ли перемещающий конструктор как noexcept. В свою очередь, std::move_if_noexcept консультируется с std::is_nothrow_move_constructible, а значение этого свойства типа (см. раздел 3.3) устанавливается компиляторами в зависимости от того, объявлен ли перемещающий конструктор как noexcept (или throw()).