AUTOSAR C++14 Rule A5-1-6

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

Описание

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

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

Объяснение

Компилятор может вывести тип возврата лямбда-выражения на основе типа выражения возврата. Например, если лямбда-выражение ничего не возвращает, компилятор выводит, что типом возврата является void.

Определение возврата вводит, когда вы объявляете, что лямбда-выражение является дополнительным. Поскольку непустой возврат вводит лямбда-выражения, если вы не задаете тип возврата явным образом, разработчик, читающий ваш код, может быть смущен, о котором типе возвращается лямбда-выражение.

Явный тип возврата также укрепляет тип, проверяющий, когда компилятор генерирует неявное преобразование из типа возвращенного выражения к типу ожидаемого дохода.

Реализация Polyspace

Polyspace® отмечает лямбда-выражения с помощью типов "не пустой возврат", если тип возврата не задан явным образом.

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

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

Примеры

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

#include<iostream>
#include <cstdint>
#include <cstdio>

void  func()
{
    std::uint8_t TARGET = 10;
    auto lambda_incr = [&](std::uint8_t x) -> std::uint8_t {//Compliant
        while (x < TARGET)
            x++;
        return x;

    };
    auto lambda_decr = [&](std::uint8_t y) { //Non-compliant, returned type is not specified
        while (y > TARGET)
            y--;
        return y;

    };
    char exp[] = "hello.";
    auto lambda3 = [exp]() { //Compliant, void return type.
        std::cout << exp << std::endl;
    };

    auto x = lambda_incr(5);
    auto y = lambda_decr(11);
    lambda3();


}

В этом примере Polyspace отмечает лямбда-выражение lambda_decr потому что никакие не возвращаются, тип задан. Polyspace не делает флага lambda3 даже при том, что никакие не возвращаются, тип задан, потому что выражение ничего не возвращает (пустой тип возврата).

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

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