Обманка лямбда зонда
Схема эмулятора лямбда зонда своими руками
Дата публикации: .
Категория: Автотехника.
Лямбда зонд (также называется кислородным контроллером, датчиком O2, ДК) является неотъемлемой частью выхлопной системы автотранспортных средств, отвечающих экологическим стандартам EURO-4 и выше. Это миниатюрное устройство (обычно устанавливается 2 лямбда зонда и более) контролирует содержание O2 в выхлопных смесях автотранспортного средства, благодаря чему значительно снижается выброс ядовитых отходов в атмосферу.
В случае некорректной работы ДК или если произошло отключение лямбда зонда, функционирование силового агрегата может быть нарушено, из-за чего мотор перейдет в аварийный режим (на панели загорится Check Engine). Чтобы такого не случилось, систему автомобиля можно перехитрить, установив обманку.
Механическая обманка лямбда зонда («ввертыш»)
«Ввертыш» – это втулка, изготовленная из бронзы или теплоустойчивой стали. Внутренняя часть такой «проставки» и ее полости заполняются керамической крошкой со специальным каталитическим покрытием. Благодаря этому отработанные газы дожигаются быстрее, что, в свою очередь, приводит к разным показателям импульсов 1 и 2 ДК.
Важно! Любая обманка устанавливается только на исправный лямбда зонд.
Самодельная обманка лямбда зонда, схема которой представлена ниже, проста в изготовлении. Для этого вам потребуется подготовить:
- заготовку;
- отвертку;
- набор ключей.
Делается обманка на обрабатывающем токарном станке. Если такового нет, то можно обратиться к специалисту, предоставив ему чертеж.
Полученная деталь совместима с большинством выхлопных систем как отечественных, так и зарубежных автомобилей.
Установка обманки лямбда зонда производится следующим образом:
- Поднимите авто на эстакаду.
- Отключите минусовую клемму на АКБ.
- Выкрутите первый (верхний) зонд (если их два, то снимите тот, который расположен между катализатором и выпускным коллектором).
- Вкрутите лямбда зонд в «проставку».
- Установите «усовершенствованный» датчик на место.
- Подключите клемму к аккумулятору.
Полезно! Обычно механическая обманка второго лямбда зонда не выполняется, так как этот ДК защищен катализатором и контролирует только его состояние. Самым чутким является именно первый датчик, который установлен ближе всего к коллектору.
После этого системная ошибка «Check Engine» должна исчезнуть. Если этот способ не сработал, можно воспользоваться более дорогостоящей обманкой.
Электронная обманка
Еще один способ устранения проблем с ДК – это электронная обманка лямбда зонда, схема которой представлена чуть ниже. Так как датчик кислорода передает сигнал контроллеру, то схема-обманка, подключенная к проводке от датчика к разъему, позволит «загрубить» систему. Благодаря этому, в ситуации, если лямбда зонд будет неисправен, силовой агрегат будет продолжать работать корректно.
Полезно! Места установки такой обманки могут отличаться в зависимости от модели АТС. Например, она может быть монтирована в центральный тоннель между сиденьями, в торпеде или моторном отсеке.
Схема-обманка – это однокристальный микропроцессор, который анализирует процессы в катализаторе, получает данные от первого ДК, обрабатывает их, преобразует до показателей второго датчика и выдает на процессор автомобиля соответствующий сигнал.
Чтобы установить обманку этого типа, вам потребуется схема подключения лямбда зонда, которая выглядит следующим образом.
Как видите, бывает разная распиновка лямбда зонда (4 провода, три и два). Цвета проводов могут также отличаться, чаще всего встречаются изделия с 4 пинами (2 черных, белый и синий).
Для изготовления обманного устройства, вам потребуется:
- паяльник с мелким жалом и припой;
- канифоль;
- неполярный конденсатор емкостью 1 мкФ Y5V, +/- 20%;
- резистор (сопротивление) на 1 мОм, С1-4 имп, 0,25 Вт;
- нож и изоляционная лента.
Полезно! Перед установкой, схему лучше всего поместить в пластиковый корпус и залить ее «эпоксидкой».
Дальше электронная обманка на лямбда зонд своими руками монтируется следующим образом:
- Отключите минусовую клемму АКБ.
- «Препарируйте» провод, который идет от самого ДК к разъему.
- Разрежьте синий провод и подсоедините его обратно через резистор.
- Впаяйте неполярный конденсатор меду белым и синим проводами.
- Заизолируйте соединения.
Ниже представлена схема обманки лямбда зонда своими руками для распиновки на 4 провода.
На заключительном этапе, должно получиться следующее.
Такие манипуляции не стоит выполнять, если у вас нет должного опыта. Сегодня в магазинах представлены готовые схемы-обманки, которые без труда сможет установить даже начинающий водитель.
Перепрошивка контроллера
Некоторые особо искушенные автовладельцы решаются на перепрошивку блока управления, благодаря чему блокируется обработка сигналов второго кислородного датчика. Однако необходимо учитывать, что любые изменения алгоритма работы системы могут привести к необратимым последствиям, так как вернуть заводские настройки будет практически невозможно и затратно. Поэтому выполнять такие манипуляции самостоятельно не рекомендуется. То же самое касается и готовых прошивок, которые продаются в интернете.
Полезно! При перепрошивке лямбда зонды удаляются.
Если вы все-таки хотите произвести перепрошивку системы, то обратитесь к грамотному специалисту, который сможет отключить получение данных ДК с помощью специализированного оборудования.
Также стоит учитывать, что практически любое вмешательство в работу систем, может привести к не самым приятным последствиям.
Какие последствия бывают после установки обманок
Нужно понимать, что любая обманка устанавливается на страх и риск автовладельца. Если монтаж был произведен неправильно, то вы можете столкнуться со следующими проблемами:
- Из-за того, что бортовой компьютер не может регулировать впрыск жидкости, может произойти нарушение работы мотора.
- Если схема неправильно спаяна, это может привести к повреждению электропроводки.
- В процессе установки обманки вы можете повредить датчики кислорода, после чего даже не узнаете об их неисправности (так как у вас уже будет установлена обманка).
- После таких вмешательств (не только при перепрошивке) может произойти сбой в бортовом компьютере.
Любая неточность приведет к плачевным последствиям, поэтому лучше установить более безопасный готовый эмулятор. В отличие от обманки, он не «обманывает» блок управления, а лишь обеспечивает его корректную работу, преобразуя сигнал ДК. Внутри эмулятора также установлен микропроцессор (как и в самодельной электронной обманке), который способен оценивать выхлопные газы и анализировать ситуацию.
В заключении
Многие автовладельцы устанавливают на свои машины самодельные обманки, чтобы сэкономить на покупке новых кислородных датчиков. Однако в такой погоне за выгодой, вы вполне можете столкнуться с большими денежными затратами, если кустарное устройство повлияет на работу «жизненно-важных» систем. Поэтому устанавливать обманки рекомендуется, только если вы смыслите в работах такого плана.
Эти примеры могут содержать грубые слова, основанные на вашем поиске.
Эти примеры могут содержать разговорные слова на основе вашего поиска.
2. Измерительный датчик по п.1, отличающийся тем, что измерительный зонд (12) выполнен в виде насосной ячейки, а контрольный зонд (14) выполнен в виде лямбда-зонда .
Messfühler nach Anspruch 1, dadurch gekennzeichnet, dass die Messsonde (12) и Pumpzelle und die Referenzsonde (14) и Lambda-Sonde ausgebildet sind.7. Двигатель внутреннего сгорания по одному из пп.2-4, отличающийся тем, что датчик (27) выполнен в виде лямбда-зонда , расположенного в выпускном отверстии (13) двигателя внутреннего сгорания.
7. Brennkraftmaschine nach einem der Ansprüche 2-4, dadurch gekennzeichnet, daß der Sensor (27) als im auspuff (13) der Brennkraftmaschine angeordnete Lambda-Sonde ausgebildet ist.Изобретение, кроме того, относится к соответствующему способу индивидуальной передачи сигналов между лямбда-зондом и электрическим интерфейсом.
Die Erfindung betnerfft ferner ein entsprechendes Verfahren zur individuellen Signalübertragung zwischen einer Lambdasonde и einer elektrischen Schnittstelle.Гайка для крепления лямбда-зонда к выхлопной трубе автомобиля
В процессе определения температуры выхлопных газов измеряют внутреннее сопротивление лямбда-зонд и определяют насыщенность или обедненность смеси.
Bei einem Verfahren zum Bestimmen der Abgastemperatur wird der Innenwiderstand einer Lambdasonde gemessen, es es wird ermittelt, ob mageres oder fettes Gemisch vorliegt.4. Устройство по п.3, отличающееся тем, что нагревательный элемент представляет собой нагревательный элемент для нагрева , лямбда-зонд и / или каталитический нейтрализатор.
Vorrichtung nach Anspruch 3, dadurch gekennzeichnet, daß es sich bei dem Heizelement um ein Heizelement zur Beheizung einer Lambdasonde und / oine eines Katalysators handelt.Изобретение относится к способу и устройству управления для управления нагревательным устройством (26) для нагрева компонента (24), в частности лямбда-зонда .
Die Erfindung betinfft ein Verfahren sowie eine Steuervorrichtung zur Steuerung einer Heizeinrichtung (26) zur Beheizung eines Bauteils (24), insbesondere einer Lambdasonde .Изобретение, кроме того, относится к способу выравнивания лямбда-зонда и к способу управляемого сгорания соотношения воздуха топливовоздушной смеси.
Ferra Betrifft Die Erfindung ein Verfahren zur Justierung einer Lambdasonde sowie ein Verfahren zur luftzahlgeregelten Verbrennung eines Brennstoff-Luft-Gemischs.Изобретение относится к способу определения поляризации ячейки накачки и / или ячейки Нернста лямбда-зонда для диагностики широкополосного лямбда-зонда.
Die Erfindung betinfft ein Verfahren zur Bestimmung einer Поляризация Einer Pumpzelle und / oder einer Nernstzelle Einer Lambdasonde zur Диагностика дер Breitband-Lambdasonde.В результате более ранней регулировки готовности лямбда-зонда доля токсичных выхлопных газов, которые возникают, в частности, на этапе холодного запуска двигателей внутреннего сгорания, уменьшается.
Aufgrund der früheren Regelbereitschaft einer Lambdasonde необычайно крутой и привлекательный Abgasen verringert, умерший за последние пять лет.Целью изобретения является создание способов калибровки, валидации и юстировки лямбда-зонда , которые приводят к достаточно надежным результатам с точки зрения валидации и, необязательно, юстировки функции лямбда-зонда без использования стехиометрической контрольной рабочей точки.
Der Erfindung liegt die Aufgabe zugrunde, Verfahren zur Kalibrierung, Validierung und Justierung einer Lambdasonde zu schaffen, die ohne Anfahren eines stöchiometrischen Referenzbetriebspunktes zhenhünchengürchenshürbürchengürbürchengürchenshürbürgürchengürbürgürbürkРаскрыты устройство и способ работы датчика газа, в частности лямбда-зонд . Указанный датчик снабжен нагревателем и нагревается до запуска двигателя внутреннего сгорания.
В настоящее время он не имеет ничего общего с газом, , ,СПОСОБ КАЛИБРОВКИ, ПРОВЕРКИ И ВЫРАВНИВАНИЯ ЛЯМБДА-ЗОНДА
СПОСОБ ПОКРЫТИЯ КОЛЛЕКТОРОВ ДАВЛЕНИЯ В ИЗМЕРИТЕЛЬНОМ СИГНАЛЕ ЛАМБДА-ЗОНД
СПОСОБ КОРРЕКЦИИ ВЫХОДНОГО СИГНАЛА ЛЯМБДА-ЗОНДА
ПРОЦЕСС И УСТРОЙСТВО ДЛЯ ОБНАРУЖЕНИЯ СТАТУСА ОШИБКИ В ЗОНД LAMBDA .
СПОСОБ И УСТРОЙСТВО ДЛЯ ВЫПОЛНЕНИЯ НУЛЕВОЙ АДАПТАЦИИ ЛЯМБДА-ЗОНДА ДВИГАТЕЛЯ ВНУТРЕННЕГО СГОРАНИЯ
VERFAHREN UND VORRICHTUNG ZUM DURCHFÜHREN EINER NULLPUNKTADAPTION EINER LAMBDASONDE EINES VERBRENNUNGSMOTORSУСТРОЙСТВО И МЕТОД РАБОТЫ ДАТЧИКА ГАЗА, ОСОБЕННО ЗОНД LAMBDA
VORRICHTUNG UND VERFAHREN ZUM BETREIBEN EINES MESSFÜHLERS FÜR GASE, INSBESONDERE EINER LAMBDASONDEПРОЦЕСС И УСТРОЙСТВО ДЛЯ ИЗМЕРЕНИЯ ТЕМПЕРАТУРЫ С ИСПОЛЬЗОВАНИЕМ ВНУТРЕННЕГО СОПРОТИВЛЕНИЯ ЗОНДА ЛАМБДА .
VERFAHREN UND VORRICHTUNG ZUR TEMPERATURBESTIMMUNG MIT HILFE DES INNENWIDERSTANDES EINER LAMBDASONDE .ЛЯМБДА-ЗОНД ДЛЯ ОБНАРУЖЕНИЯ СОДЕРЖАНИЯ КИСЛОРОДА В ВЫГОДНОМ ГАЗЕ И СПОСОБ ПЕРЕДАЧИ СИГНАЛОВ МЕЖДУ ЛЯМБДА-ЗОНД И ЭЛЕКТРИЧЕСКИМ ИНТЕРФЕЙСОМ
LAMBDASONDE ZUR ERFASSUNG EINES SAUERSTOFFGEHALTS В EINEM ABGAS UND VERFAHREN ZUR SIGNALÜBERTRAGUNG ZWISCHEN EINER LAMBDASONDE UND EINER ELEKTRISCHEN SCHNITTSTELLE ,ru Здесь первый лямбда-зонд (3) - это широкополосный лямбда-зонд, а второй лямбда-зонд (4) - лямбда-зонд с переходным напряжением. Изобретение относится к способу калибровки и проверки лямбда-зонда с ионизационным электродом при контролируемом соотношении воздуха для сгорания топливовоздушной смеси, в котором значения сигнала отработавших газов лямбда-зонда используются для контроля соотношения воздуха, а значения сигнала пламени ионизационного электрода используются для проверки лямбда-зонда.
патентов, патент , , , «Приватный сотрудник США», NEXUS, «Приморский судоходный бизнес», «Приостановка и развитие», 2006 г. одна точка калибровки и / или, по меньшей мере, одна кривая значения сигнала рассчитываются заранее из измеренных значений сигнала, и проверка лямбда-зонда выполняется на основе, по меньшей мере, одной точки калибровки и / или на основе значения по меньшей мере, одна кривая значения сигнала путем оценки отклонения от эталонного значения, и в случае положительной проверки лямбда-зонд освобождается для контролируемого соотношения воздуха, а в случае отрицательной проверки лямбда-зонд перестраивается.Изобретение относится к способу контроля динамических характеристик широкополосного лямбда-зонда (25), в котором измеряется лямбда-сигнал, соответствующий концентрации кислорода в отработавших газах. двигателя (1) внутреннего сгорания определяется с использованием широкополосного лямбда-зонда (25), в котором наблюдатель, формирующий смоделированный лямбда-сигнал из входных переменных, связан с двигателем внутреннего сгорания (1), и в котором сигнал ошибки оценки формируется из разность смоделированного лямбда-сигнала и измеренного лямбда-сигнала или разность сигналов, полученных из него в качестве входной переменной контроллера (14), подключенного перед моделью (15) в наблюдателе (10). патентах - wipo от Женские тюрьмыru В зависимости от того, стабилен ли сигнал лямбда-зонда (12) или нет, измеряется лямбда-значение для хотя бы одного впускного клапана (10) с использованием лямбда-зонд (12) при установленном рабочем состоянии.
патентов - военная служба от En enre, nous souhaitons établir des liens étroits avec les autres les autresés du pay and leurs Программы развития для повышения уровня судьбы учеников и выпускников школ и профессий.ru Изобретение относится к способу проведения адаптации лямбда-зонда (16) к нулевой точке в секции (4) выпуска отработавших газов двигателя внутреннего сгорания (2), в котором подается свежий воздух во время период после запуска после отключения двигателя внутреннего сгорания (2) из системы подачи воздуха (3) в секцию (4) выпуска отработавших газов, так что свежий воздух проходит вокруг лямбда-зонда (16).
Патенты - wipo от °) до инноваций,ru Указанные способ и устройство позволяют надежно диагностировать динамику широкополосного лямбда-зонда и обнаруживать замедленные широкополосные лямбда-зонды.
патентов - wipo от Il importe de comprendre les modèles de propriété; toutefois, maintes raions, очевидные разливы или скопления людей.ru Изобретение относится к способу определения поляризации ячейки накачки и / или ячейки Нернста лямбда-зонда для диагностики широкополосного лямбда-зонда.
патентах и 9344 «Лучшая аффектация» во Франкфурте-на-Майне (Allemagne), «Aouritite est établie»и Здесь, в частности, значение сигнала первого лямбда-зонда и сигнал Значению второго лямбда-зонда присваивается значение, которое представляет собой давление в выхлопной системе двигателя внутреннего сгорания.Изобретение относится к способу проверки функциональной надежности, по меньшей мере, одного впрыскивающего клапана (10) двигателя внутреннего сгорания (8), к которому относится изобретение. по меньшей мере, проверяется функциональная надежность лямбда-зонда (12), приспособленного для определения состояния, по меньшей мере, одного впрыскивающего клапана (10), при этом устанавливается установившийся режим работы двигателя внутреннего сгорания (8), и проводится проверка, чтобы убедиться, что хотя бы один сигнал от лямбда-зонда (12) стабилен для установленного режима работы.
Патенты-WIPO От Tu Vois Cette Cicatrice?ru То есть настоящее изобретение основано на осознании того, что существует взаимосвязь или корреляция между значениями сигналов первого лямбда-зонда и значениями сигналов второго лямбда-зонда и давлением в системе выпуска. ,
патентах - wipo от Nous débattons actuellement de la motion no #, относящихся к Loi Sur Les Services gouvernementauxru Таким образом, давление в выхлопной системе является функцией сигнала первого лямбда-зонда и сигнала второй лямбда-зонд.
патентах-wipo от Tout de suite.Tu представляет собой, Боб?ru Целью изобретения является создание способов калибровки, проверки и юстировки лямбда-зонда, которые приводят к достаточно надежным результатам с точки зрения валидации и, возможно, юстировки функции лямбда-зонда без использования стехиометрической контрольной рабочей точки. ,
Патенты-wipo от Dans ce cadre, эксперт по вопросам права и безопасностиru Изобретение также относится к способу работы двигателя внутреннего сгорания, содержащему лямбда-зонд, расположенный в системе выпуска отработавших газов, согласно Для чего значения калибровки двух загрязняющих компонентов отработавших газов используются для калибровки лямбда-зонда.
патентов, вип , из Обязательная статья о возрождении компетенции, а также обширные знания и опыт в области управления, пример и администрация, большая часть возможных направлений l'Unionru Указанная цель достигается в соответствии с изобретением тем, что давление в выхлопной системе двигателя внутреннего сгорания определяется способом, зависящим от сигнала первого лямбда-зонда (3) и сигнала второй лямбда-зонд (4).Изобретение относится к способу определения фактической кислородной нагрузки (m02) 3-ходового катализатора (6) лямбды. Изобретение относится к способу определения фактической кислородной нагрузки (m02) трехкомпонентного катализатора (6). управляемый двигатель внутреннего сгорания (1), посредством чего значение для фактической кислородной нагрузки (m02) вычисляется из сигнала лямбда-зонда (5) с предварительным катализатором и измеренного массового расхода воздуха путем интегрирования во времени, посредством чего пост -Катализатор лямбда-зонда инициализируется при прерывании сигнала.
патент-wipo от Cette din est un peu séche, не?ru Задача изобретения решается с помощью меры, определяемой для динамических характеристик широкополосного лямбда-зонда (25) на основе оценки сигнала ошибки оценки или полученной из него переменной, и посредством этой меры, сравниваемой с предопределенные пределы для оценки динамических характеристик широкополосного лямбда-зонда (25).
Патенты - WIPO FR Настоящее изобретение посвящено публикации в журнале "Официальный журнал Европы"EN Изобретение относится к блоку управления для работы особенно одноклеточного широкополосного лямбда-зонда Система последующей обработки отработавших газов двигателя внутреннего сгорания, причем широкополосный лямбда-зонд поддерживается в режиме ограничения тока посредством напряжения насоса (303), в результате чего создается ток насоса (304), который пропорционален оставшемуся кислороду в выхлопном газе. и напряжение накачки (303) регулируется в зависимости от создаваемого тока накачки (304).Настоящее изобретение относится к способу управления воздушно-топливной смесью в двигателе внутреннего сгорания, в котором выходной сигнал от первого лямбда-зонда, расположенного в выхлопной трубе выше по потоку от
. катализатор подается в управляющее устройство, которое передает ответный сигнал о смеси воздух / топливо, а затем принимает корректирующий сигнал на основе выходного сигнала от второго лямбда-зонда, расположенного ниже по потоку от катализатора. патентах - wipo от va va beaucoup mieuxru В соответствии с изобретением устройство зонда выполнено в виде одного лямбда-зонда, непрерывно вырабатывающего сигналы зонда, расположенные ниже по потоку от катализатора отработавших газов, посредством которых, в При взаимодействии с устройством лямбда-регулирования регистрируется увеличение содержания кислорода в потоке выхлопных газов на протяжении всей фазы обедненной операции и уменьшение содержания кислорода в потоке выхлопных газов на протяжении всей фазы обогащенной работы. по отношению к значению сравнения содержания кислорода (U0), посредством чего как на этапе обеднения, так и на этапе обогащения операции задается пороговое значение переключения (U1, U2; U1 ', U2'), зависящее от содержания кислорода, которое при достижении указанное значение, устройство лямбда-регулирования переключается в другую рабочую область.
патентов - wipo от Regardez donc quest là!ru При переходе в направлении обедненного лямбда-числа или при переходе в направлении обогащенного лямбда-числа в момент (t1), когда сигнал зонда лямбда-зонда (26) достигает предварительно определенного порогового значения значение (λs), формируется отклонение регулятора (ΔR) между текущим фактическим значением регулятора (R1) и текущим значением уставки регулятора, и новое значение уставки (R2) регулятора определяется путем сложения двухкратного отклонения регулятора (ΔR) текущему значению регулятора (R1).
патентов, , , , №, , , лямбда-зонд обнаруживает значение, характерное для лямбда-отработавших газов номер перед трехходовым каталитическим преобразователем и передает указанное значение в блок управления двигателем со встроенным регулятором PI или PID.
патент 9643 и Изобретение отличается тем, что в течение диагностического периода алгоритм управления переключается на двухточечное лямбда-регулирование и что динамика широкополосного лямбда-зонда выводятся из результирующей длительности лямбда-сигнала или регулируемой регулируемой переменной. патентах - wipo от Есть ли возможность сделать все возможное, чтобы согласиться с вопросом о союзе в Европе?ru Лямбда-зонд (26) обнаруживает характеристику значения лямбда-числа выхлопных газов перед трехходовым каталитическим преобразователем (20) и передает это значение в блок управления двигателем (28) со встроенным регулятором.
патентных прав от В частности, в полном соответствии с принципами сотрудничества с общественностью и общественностью, с точки зрения эффективности их деятельности в различных сферах, таких как мировая политика в области туризма и туризма Могут быть найдены лямбда-зонд (6), расположенный в выпускном канале (3) двигателя внутреннего сгорания, с установленным значением лямбды, чтобы найти неисправный компонент или утечку. патентов - wipo от Grâce aux largesses de sa famille, Buster the tout étudié, des cérémonies tribales native-américaines à la cartographie, le traçage de территория исследований неисследованных.лямбда-выражений (начиная с C ++ 11) - cppreference.com
Создает замыкание: безымянный функциональный объект, способный захватывать переменные в области видимости.
[править] Синтаксис
[ захватывает ] ( params ) спецификаторов исключение attr -> ret требуется ( опционально) (c ++ 20) { кузов } | (1) | ||||||||
[ захватывает ] ( params ) -> ret { body } | (2) | ||||||||
[ захватывает ] ( params ) { body } | (3) | ||||||||
[ захватывает ] { тело } | (4) | ||||||||
1) Полная декларация.
2) Объявление const лямбды: объекты, захваченные копией, являются const в теле лямбды.
3) Пропущенный конечный тип возврата: тип возврата оператора замыкания ()
выводится из операторов возврата, как будто для функции, тип возврата которой объявлен как auto.
4) Список пропущенных параметров: функция не принимает аргументов, как если бы список параметров был ()
. Эту форму можно использовать только в том случае, если не используется ни один из constexpr, изменяемый, спецификация исключения, атрибуты или конечный тип возврата.
[править] Объяснение
захватов | - | разделенный запятыми список нулей или более перехватов, опционально начинающихся с перехвата по умолчанию. См. Ниже подробное описание снимков. Лямбда-выражение может использовать переменную без ее захвата, если переменная
Лямбда-выражение может считывать значение переменной без ее захвата, если переменная
| ||||
| - | список параметров шаблона (в угловых скобках), используемый для предоставления имен параметрам шаблона общей лямбды (см. ClosureType :: operator () ниже).Как и в объявлении шаблона, список параметров шаблона может сопровождаться необязательным предложением require, которое указывает ограничения на аргументы шаблона. Если указан, список параметров шаблона не может быть пустым ( <> не допускается). | ||||
params | - | Список параметров, как в именованных функциях, за исключением того, что аргументы по умолчанию недопустимы (до C ++ 14). Если auto используется в качестве типа параметра, лямбда - это универсальная лямбда .(начиная с C ++ 14) | ||||
спецификаторов | - | Необязательная последовательность спецификаторов. Допустимы следующие спецификаторы:
| ||||
исключение | - | предоставляет спецификацию исключений или предложение noexcept для оператора () типа замыкания | ||||
attr | - | предоставляет спецификацию атрибута для типа оператора вызова функции типа закрытия. Любой указанный атрибут относится к типу оператора вызова функции, а не к самому оператору вызова функции.(Например, нельзя использовать атрибут [[noreturn]] .) | ||||
рет | - | Возвращаемый тип. Если нет, то это подразумевается оператором возврата функции (или пустым, если не возвращает никакого значения) | ||||
требуется | - | добавляет ограничение для оператора () типа замыкания | ||||
кузов | - | Функциональное тело |
Лямбда-выражение является предварительным выражением уникального неименованного неагрегированного неагрегированного типа класса, известного как тип закрытия , , который объявлен (для целей ADL) в области наименьшего блока, области действия класса или область имен, содержащая лямбда-выражение.Тип замыкания имеет следующие члены:
ClosureType :: operator () (params)
Оператор ret () (params) const {body} | (ключевое слово mutable не использовалось) | |
ret operator () (params) {body} | (использовалось ключевое слово mutable) | |
template | (начиная с C ++ 14) (общая лямбда) | |
template | (начиная с C ++ 14) (общая лямбда, использовалось ключевое слово mutable) | |
Выполняет тело лямбда-выражения при вызове.При доступе к переменной обращается к ее захваченной копии (для сущностей, захваченных копией) или к исходному объекту (для сущностей, захваченных по ссылке). Если ключевое слово mutable не использовалось в лямбда-выражении, оператор вызова функции является константно квалифицированным, и объекты, которые были захвачены копией, не модифицируются внутри этого оператора (). Оператор вызова функции никогда не является волатильным и никогда не виртуальным.
Оператор вызова функции всегда равен | (начиная с C ++ 17) |
Оператор вызова функции является непосредственной функцией, если в лямбда-выражении было использовано ключевое слово | (начиная с C ++ 20) |
Для каждого параметра в параметрах, тип которого указан как // универсальная лямбда, operator () - это шаблон с двумя параметрами auto glambda = [] (auto a, auto && b) {return a (ц)...); return [=] {принтер (тс ...); }; // нулевая лямбда (не принимает параметров) }; }; auto p = vglambda ([] (auto v1, auto v2, auto v3) {std :: cout << v1 << v2 << v3;}); auto q = p (1, 'a', 3.14); // выводит 1a3.14 д (); // вывод 1a3.14 | (начиная с C ++ 14) |
Если в лямбда-определении используется явный список параметров шаблона, этот список параметров шаблона используется с оператором // универсальная лямбда, operator () - это шаблон с двумя параметрами auto glambda = [] | (начиная с C ++ 20) |
исключение спецификации исключения для лямбда-выражения применяется к оператору вызова функции или шаблону оператора.
В целях поиска имени, определения типа и значения указателя this и для доступа к нестатическим членам класса тело оператора вызова функции типа замыкания рассматривается в контексте лямбда-выражения.
struct X { int x, y; оператор int () (int); void f () { // контекст следующей лямбды является функцией-членом X :: f [=] () -> Int { оператор return () (this-> x + y); // X :: operator () (this-> x + (* this).у) // это имеет тип X * }; } };
Оператор
нельзя назвать в объявлении друга. оператора ClosureType
()
Висячие ссылки
Если объект без ссылки захватывается по ссылке, неявно или явно, и оператор вызова функции объекта замыкания вызывается после того, как время жизни объекта закончилось, происходит неопределенное поведение. Закрытия C ++ не увеличивают время жизни захваченных ссылок.
То же самое относится и к времени жизни объекта, на который указывает захваченный этот указатель
.
ClosureType :: operator ret (*) (params) ()
без генерирования лямбда | ||
с использованием F = ret (*) (params); | (до C ++ 17) | |
с использованием F = ret (*) (params); | (начиная с C ++ 17) | |
универсальный лямбда без захвата | ||
шаблон | (начиная с C ++ 14) (до C ++ 17) | |
шаблон | (начиная с C ++ 17) | |
Эта определяемая пользователем функция преобразования определяется только в том случае, если список захвата лямбда-выражения пуст.Это public, constexpr, (начиная с C ++ 17) не виртуальная, не явная, const noexcept (начиная с C ++ 14) функция-член объекта замыкания. Это немедленная функция, если оператор вызова функции лямбда-функции является непосредственной функцией. (начиная с C ++ 20)
Типовая лямбда без захвата имеет определяемый пользователем шаблон функции преобразования с тем же самым изобретенным списком параметров шаблона, что и шаблон оператора вызова функции. Если возвращаемый тип является пустым или автоматическим, он получается путем вычета возвращаемого типа в специализации шаблона функции, который, в свою очередь, получается путем вывода аргумента шаблона для шаблонов функций преобразования. void f1 (int (*) (int)) {} void f2 (char (*) (int)) {} void h (int (*) (int)) {} // # 1 void h (char (*) (int)) {} // # 2 auto glambda = [] (auto a) {return a; }; f1 (glambda); // хорошо f2 (glambda); // ошибка: не конвертируемая ч (glambda); // хорошо: вызов # 1, так как № 2 не конвертируется int & (* fpi) (int *) = [] (auto * a) -> auto & {return * a; }; // ок | (начиная с C ++ 14) |
Значение, возвращаемое этой функцией преобразования, является указателем на функцию со связью языка C ++, которая при вызове имеет тот же эффект, что и непосредственный вызов оператора вызова функции объекта замыкания.
Эта функция является constexpr, если оператор вызова функции (или специализация для общих лямбд) является constexpr. auto Fwd = [] (int (* fp) (int), auto a) {return fp (a);}; auto C = [] (auto a) {return a;}; static_assert (Fwd (С, 3) == 3); // ОК auto NC = [] (auto a) {static int s; вернуть a;}; static_assert (Fwd (Северная Каролина, 3) == 3); // ошибка: никакая специализация не может быть constexpr из-за статического s Если оператор | (начиная с C ++ 17) |
Эта функция является непосредственной функцией, если оператор вызова функции (или специализация для общих лямбд) является непосредственной функцией. | (начиная с C ++ 20) |
ClosureType :: ClosureType ()
ClosureType () = удалить; | (до C ++ 14) | |
ClosureType () = по умолчанию; | (начиная с C ++ 20) (только если не указан захват) | |
ClosureType (const ClosureType &) = по умолчанию; | (начиная с C ++ 14) | |
ClosureType (ClosureType &&) = по умолчанию; | (начиная с C ++ 14) | |
Типы закрытия не являются DefaultConstructible.Типы замыкания имеют удаленный (до C ++ 14) конструктор по умолчанию (начиная с C ++ 14). | (до C ++ 20) |
Если захваты не указаны, тип закрытия имеет конструктор по умолчанию по умолчанию. В противном случае он не имеет конструктора по умолчанию (это включает случай, когда есть захват по умолчанию, даже если он на самом деле ничего не захватывает). | (начиная с C ++ 20) |
Конструктор копирования и конструктор перемещения неявно объявлены (до C ++ 14), объявлены как дефолтные (начиная с C ++ 14) и могут быть неявно определены в соответствии с обычным правила для конструкторов копирования и перемещения конструкторов.
ClosureType :: operator = (const ClosureType &)
ClosureType & operator = (const ClosureType &) = удалить; | (до C ++ 20) | |
ClosureType & operator = (const ClosureType &) = по умолчанию; | (начиная с C ++ 20) (только если не указаны захваты) | |
ClosureType & operator = (const ClosureType &) = удалить; | (начиная с C ++ 20) (в противном случае) | |
Оператор назначения копирования определен как удаленный (и оператор назначения перемещения не объявлен).Типы закрытия не являются CopyAssignable. | (до C ++ 20) |
Если захваты не указаны, у типа закрытия есть оператор присвоения копии по умолчанию и оператор присвоения перемещения по умолчанию. В противном случае он имеет оператор присваивания удаленной копии (это включает случай, когда есть захват по умолчанию, даже если он фактически ничего не захватывает). | (начиная с C ++ 20) |
ClosureType :: ~ ClosureType ()
~ ClosureType () = по умолчанию; | ||
Деструктор объявлен неявно.
ClosureType :: Captures
Если лямбда-выражение захватывает что-либо посредством копии (либо неявно с помощью пункта захвата [=]
, либо явно с захватом, который не включает символ &, например, [a, b, c]
), тип замыкания включает неназванные нестатические члены данных, объявленные в неуказанном порядке, которые содержат копии всех сущностей, которые были захвачены.
Те элементы данных, которые соответствуют перехватам без инициализаторов, инициализируются напрямую при вычислении лямбда-выражения.Те, которые соответствуют перехватам с инициализаторами, инициализируются так, как этого требует инициализатор (может быть копирование или прямая инициализация). Если массив захвачен, элементы массива инициализируются напрямую в порядке возрастания индекса. Порядок, в котором элементы данных инициализируются, является порядком, в котором они объявлены (который не указан).
Тип каждого элемента данных - это тип соответствующего захваченного объекта, за исключением случаев, когда у объекта есть ссылочный тип (в этом случае ссылки на функции фиксируются как lvalue ссылки на ссылочные функции, а ссылки на объекты захватываются как копии из упомянутых объектов).
Для объектов, которые захвачены по ссылке (с захватом по умолчанию [&]
или при использовании символа &, например, [& a, & b, & c]
), это не определено, если дополнительные элементы данных объявлены в типе замыкания, но любые такие дополнительные члены должны удовлетворять LiteralType (начиная с C ++ 17).
[править] Лямбда-захват
Захваты - это разделенный запятыми список из нуля или более. перехватов , возможно, начиная с перехвата по умолчанию.Список захвата определяет внешние переменные, доступные из тела лямбда-функции. Единственные значения по умолчанию захвата
-
и
(неявно фиксируют используемые автоматические переменные по ссылке) и -
=
(неявно захватывать используемые автоматические переменные путем копирования).
Текущий объект ( * это
) может быть захвачен неявно, если присутствует какой-либо из параметров захвата по умолчанию. Если неявно перехвачено, это всегда перехвачено ссылкой, даже если по умолчанию перехвата =
.Неявный захват * это
, когда по умолчанию захват =
не рекомендуется. (начиная с C ++ 20)
Синтаксис отдельного захвата в захвате
идентификатор | (1) | ||||||||
идентификатор ... | (2) | ||||||||
Идентификатор идентификатора | (3) | (начиная с C ++ 14) | |||||||
& идентификатор | (4) | ||||||||
и , идентификатор ... | (5) | ||||||||
& Идентификатор идентификатора | (6) | (начиная с C ++ 14) | |||||||
это | (7) | ||||||||
* это | (8) | (начиная с C ++ 17) | |||||||
... идентификатор инициализатора | (9) | (начиная с C ++ 20) | |||||||
& ... Инициализатор идентификатора | (10) | (начиная с C ++ 20) | |||||||
1) простой захват копии
4) простой захват по ссылке
6) захват по ссылке с инициализатором
7) простой захват по ссылке текущего объекта
8) простой захват текущего объекта
9) захват копии с помощью инициализатора, который является расширением пакета
10) захват по ссылке с помощью инициализатора, который является расширением пакета
Если по умолчанию используется захват и
, последующие простые захваты не должны начинаться с и
.
struct S2 {void f (int i); }; void S2 :: f (int i) { [&] {}; // ОК: захват по ссылке по умолчанию [&, i] {}; // ОК: захват по ссылке, за исключением того, что я перехвачен копией [&, & i] {}; // Ошибка: захват по ссылке, когда ссылка по умолчанию [&, этот] {}; // ОК, эквивалентно [&] [&, это, я] {}; // ОК, эквивалентно [&, i] }
Если значение захвата по умолчанию равно =
, последующие простые захваты должны начинаться с и
или быть * это
(начиная с C ++ 17) или это
(начиная с C ++ 20).
struct S2 {void f (int i); }; void S2 :: f (int i) { знак равно // ОК: захват захвата по умолчанию [=, & i] {}; // ОК: захват копии, за исключением того, что я захвачен ссылкой [=, * это] {}; // до C ++ 17: ошибка: неверный синтаксис // поскольку c ++ 17: OK: захватывает вмещающий S2 путем копирования [=, это] {}; // до C ++ 20: ошибка: это когда = по умолчанию // начиная с C ++ 20: ОК, так же, как [=] }
Любой захват может появиться только один раз:
struct S2 {void f (int i); }; void S2 :: f (int i) { [i, i] {}; // Ошибка: я повторил [это это] {}; // Ошибка: «это» повторяется (C ++ 17) }
Только лямбда-выражения, определенные в области блока или в инициализаторе элемента по умолчанию, могут иметь захват по умолчанию или захват без инициализаторов.Для такого лямбда-выражения достигающая область определяется как набор охватывающих областей вплоть до самой внутренней включающей функции (и ее параметров). Это включает в себя области вложенных блоков и области охвата лямбда, если эта лямбда является вложенной.
Идентификатор в любом захвате без инициализатора (кроме этого захвата
) ищется с использованием обычного поиска без определения имени в области , достигающей области лямбды. Результатом поиска должна быть переменная с автоматической продолжительностью хранения, объявленной в области охвата.Переменная (или , это
) - это , явно захваченный .
Захват с инициализатором действует так, как если бы он объявлял и явно захватывал переменную, объявленную с типом auto, чья декларативная область является телом лямбда-выражения (то есть он не входит в область действия своего инициализатора), за исключением того, что:
Используется для захвата типов движения только с захватом, таким как x = std :: move (x). Это также делает возможным захват по константной ссылке, с & cr = std :: as_const (x) или аналогичным. int x = 4; auto y = [& r = x, x = x + 1] () -> int { r + = 2; вернуть х * х; } (); // обновляет :: x до 6 и инициализирует y до 25. | (начиная с C ++ 14) |
Если список захвата имеет захват по умолчанию и не захватывает явно включающий объект (как это
или * это
) или автоматическую переменную, он захватывает его неявно если
- Тело лямбда-одр-использует переменную или
это указатель
void f (int, const int (&) [2] = {}) {} // # 1 void f (const int &, const int (&) [1]) {} // # 2 пустой тест () { const int x = 17; auto g0 = [] (auto a) {f (x); }; // хорошо: вызывает # 1, не захватывает x auto g1 = [=] (auto a) {f (x); }; // не захватывает x в C ++ 14, захватывает x в C ++ 17 // захват может быть оптимизирован auto g2 = [=] (auto a) { селектор int [sizeof (a) == 1? 1: 2] = {}; f (x, селектор); // ok: зависимое выражение, поэтому захватывает x }; auto g3 = [=] (auto a) { typeid (a + x); // захватывает x независимо от того, является ли a + x неоцененным операндом }; } | (начиная с C ++ 14) |
Если в теле лямбда-выражения используется объект, захваченный копией, доступ к члену типа замыкания.Если объект не использует odr, доступ осуществляется к исходному объекту:
void f (const int *); void g () { const int N = 10; знак равно int arr [N]; // не использует odr: ссылается на const int N F (& N); // odr-use: захватывает N (копией) // & N - адрес члена объекта замыкания N, а не g's N } (); }Если лямбда-символ odr использует ссылку, захваченную ссылкой, он использует объект, на который ссылается исходная ссылка, а не сама захваченная ссылка: ,