Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Rationale for some of the design decisions

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 18. Boost.Lambda

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Rationale for some of the design decisions

Lambda functor arity

Наивысший индекс заполнителя в лямбда-выражении определяет удобство полученного функционального объекта. Однако это лишь минимальная аритмия, так как объект функции может принимать произвольно много аргументов; не нужные отбрасываются. Рассмотрим два связанных выражения и их призывы ниже:

bind(g, _3, _3, _3)(x, y, z); 
bind(g, _1, _1, _1)(x, y, z); 

Эта первая строка отбрасывает аргументы<x>и<y>и делает призыв:

g(z, z, z) 

Вторая строка отбрасывает аргументы<y>и<z>и призывает:

g(x, x, x)

В более ранних версиях библиотеки последняя строка приводила к ошибке компиляции времени. Это в основном компромисс между безопасностью и гибкостью, и этот вопрос широко обсуждался во время обзорного периода библиотеки Boost. Основные моменты длястрогой вежливостипроверка состояла в том, что он может поймать ошибку программирования в более раннее время и что выражение лямбда, которое явно отбрасывает свои аргументы, легко написать:

(_3, bind(g, _1, _1, _1))(x, y, z);

Это лямбда-выражение имеет три аргумента. Левая аргументация оператора запятой ничего не делает, и по мере того, как запятая возвращает результат оценки правой аргументации, мы заканчиваем вызовом<g(x, x, x)>даже со строгой вежливостью.

Основными аргументами против строгой проверки порядочности было то, что необходимость отбрасывать аргументы является обычным явлением и поэтому должна быть простой, и что строгая проверка порядочности на самом деле не покупает гораздо больше безопасности, особенно потому, что она не симметрична. Например, если программист хотел написать выражение<_1 + _2>, но по ошибке написал<_1 + 2>, со строгой проверкой порядочности, компилятор заметил бы ошибку. Однако если бы вместо этого было ошибочное выражение<1 + _2>, ошибка осталась бы незамеченной. Кроме того, слабая проверка быстроты немного упрощает реализацию. В соответствии с рекомендацией обзора Boost была отменена строгая проверка на прочность.


PrevUpHomeNext

Статья Rationale for some of the design decisions раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 18. Boost.Lambda может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 18. Boost.Lambda ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 17:33:45/0.025622129440308/1