AUTOSAR C++ 14 Rule A18-9-1

Станд.:: свяжите не буду использоваться

Описание

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

Станд.:: свяжите не буду использоваться.

Объяснение

std::bind берет вызываемый объект, такой как функциональный объект, и производит передающую обертку вызова для этого объекта. Вызов обертки вызывает объект с некоторыми объектными аргументами, связанными с аргументами, которые вы задаете в обертке. Например, в этом фрагменте кода, foo называется через bar с первым (вторым) аргументом bar связанный со вторым (первым) аргументом foo.

int foo(int, int);
auto bar = std::bind(foo, _2, _1);
bar(10, 20); //call to foo(20, 10)

Использование std::bind результаты в менее читаемом вызове функции. Разработчик, который незнаком с foo должен был бы видеть объявление foo изучать, как передать аргументы bar, и может перепутать один параметр функции с другим. Кроме того, компилятор, менее вероятно, встроит функцию, что вы создаете использование std::bind.

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

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

Примеры

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

#include <cstdint>polys
#include <functional>
class A
{
//...
};
void func(A const& a, double y) noexcept
{
//...
}
void func1() noexcept
{
    double arg2 = 0.0;
    auto bind_fn = std::bind(&func, std::placeholders::_1, arg2); // Non-compliant
    // ...
    A const a{};
    bind_fn(a);
}
void func2() noexcept
{
    auto lambda_fn = [](A const & a) -> void { // Compliant
        double arg2 = 0.0;
        func(a, arg2);
    }; // Compliant
    // ...
    A const a{};
    lambda_fn(a);
}

В этом примере, func называется через bind_fn с единственным аргументом bind_fn связанный с первым аргументом func. Это может быть неясно разработчику что arg2 в определении bind_fn второй аргумент func. Для более читаемого кода используйте лямбда-выражения вместо этого. Вызов func с двумя аргументами более ясно в определении lambda_fn.

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

Группа: 18 вспомогательных библиотек языка
Категория: необходимый, автоматизированный
Введенный в R2019b