exponenta event banner

Правило AUTOSAR C++ 14 A5-1-6

Следует явно указать возвращаемый тип лямбда-выражения, не являющегося void

Описание

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

Должен быть явно указан возвращаемый тип лямбда-выражения не-void возвращаемого типа.

Объяснение

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

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

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

Внедрение Polyspace

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

Поиск неисправностей

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

Примеры

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

#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();


}

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

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

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