AUTOSAR C++14 Rule A5-1-8

Лямбда-выражения не должны быть заданы в другом лямбда-выражении.

Описание

Управляйте определением

Лямбда-выражения не должны быть заданы в другом лямбда-выражении.

Объяснение

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

std::vector<int> v = { 1, 2, 3, 4 };
std::find(v.begin(), v.end(),
    [](int val) { return val>2 && val%2==0;});

Реализация Polyspace

Polyspace® отмечает лямбда-выражения, которые заданы в другом лямбда-выражении. Polyspace также подсвечивает самое близкое вложенное лямбда-выражение.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

развернуть все

#include<iostream>
#include<vector>
#include<algorithm>

int main()
{

    using namespace std;

    vector<int> v {1, 2, 3, 4};


    vector<int>::iterator it = v.begin();
    while (it != v.end()) {
        auto evenGreater2 = [](int val) {

            return [](int val2) { //Noncompliant
                return val2 % 2 == 0;
            }(val)&& (val) > 2;

        }(*it);


        if (evenGreater2) {
            cout << *it << endl;
            break;
        }
        ++it;
    }

}

В этом примере Polyspace отмечает лямбда-выражение, которое проверяет, является ли значение четным ([](int val2) { return val2 % 2 ==0; }) потому что это вкладывается в другом лямбда-выражении, которое также проверяет, больше ли значение 2.

Проверяйте информацию

Группа: Выражения
Категория: консультация, автоматизированная
Введенный в R2020b