AUTOSAR C++14 Rule A5-1-6

Необходимо явным образом задать возвращаемый тип недействительного лямбда-выражения возвращаемого типа

Описание

Определение правила

Возвращаемый тип выражения lambda, не являющегося пустым возвратом, должен быть явно задан.

Объяснение

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

Установка типа возврата при объявлении лямбда-выражения опциональна. Для недействительного типа lambda, если вы явным образом не задаете тип return, разработчик, читающий ваш код, может запутаться в том, какой тип возвращает lambda expression.

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

Реализация Polyspace

Polyspace® флаги lambda выражений с неанализованными типами возврата, если тип возврата явным образом не задан.

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

Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».

Примеры

расширить все

#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 даже если тип возврата не задан, поскольку выражение ничего не возвращает (тип void return).

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

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