Namespaces
Variants

std::function<R(Args...)>:: operator=

From cppreference.net
Utilities library
Function objects
Function invocation
(C++17) (C++23)
Identity function object
(C++20)
Old binders and adaptors
( until C++17* )
( until C++17* )
( until C++17* )
( until C++17* )
( until C++17* ) ( until C++17* ) ( until C++17* ) ( until C++17* )
( until C++20* )
( until C++20* )
( until C++17* ) ( until C++17* )
( until C++17* ) ( until C++17* )

( until C++17* )
( until C++17* ) ( until C++17* ) ( until C++17* ) ( until C++17* )
( until C++20* )
( until C++20* )
function & operator = ( const function & other ) ;
(1) (начиная с C++11)
function & operator = ( function && other ) ;
(2) (начиная с C++11)
function & operator = ( std:: nullptr_t ) noexcept ;
(3) (начиная с C++11)
template < class F >
function & operator = ( F && f ) ;
(4) (начиная с C++11)
template < class F >
function & operator = ( std:: reference_wrapper < F > f ) noexcept ;
(5) (начиная с C++11)

Присваивает новый целевой объект для std::function .

1) Присваивает копию целевого объекта из other , как если бы выполнялось function ( other ) . swap ( * this ) ;
2) Перемещает целевой объект из other в * this . other находится в валидном состоянии с неопределённым значением.
3) Сбрасывает текущий target . * this является empty после вызова.
4) Устанавливает целевой объект для * this в вызываемый объект f , как если бы выполнялось function ( std:: forward < F > ( f ) ) . swap ( * this ) ; . Этот оператор не участвует в разрешении перегрузки, если f не является Callable для типов аргументов Args... и типа возвращаемого значения R .
5) Устанавливает целевой объект для * this в копию f , как если бы выполнялся function ( f ) . swap ( * this ) ;

Содержание

Параметры

other - другой std::function объект для копирования цели
f - вызываемый объект для инициализации target
Требования к типам
-
F должен удовлетворять требованиям Callable .

Возвращаемое значение

* this

Примечания

Еще до того, как поддержка аллокаторов была удалена из std::function в C++17, эти операторы присваивания используют аллокатор по умолчанию, а не аллокатор * this или аллокатор other (см. LWG issue 2386 ).

Пример

#include <cassert>
#include <functional>
#include <utility>
int inc(int n) { return n + 1; }
int main()
{
    std::function<int(int)> f1;
    std::function<int(int)> f2(inc);
    assert(f1 == nullptr and f2 != nullptr);
    f1 = f2; // перегрузка (1)
    assert(f1 != nullptr and f1(1) == 2);
    f1 = std::move(f2); // перегрузка (2)
    assert(f1 != nullptr and f1(1) == 2);
    // f2 находится в допустимом, но неопределенном состоянии
    f1 = nullptr; // перегрузка (3)
    assert(f1 == nullptr);
    f1 = inc; // перегрузка (4)
    assert(f1 != nullptr and f1(1) == 2);
    f1 = [](int n) { return n + n; }; // перегрузка (4)
    assert(f1 != nullptr and f1(2) == 4);
    std::reference_wrapper<int(int)> ref1 = std::ref(inc);
    f1 = ref1; // перегрузка (5)
    assert(f1 != nullptr and f1(1) == 2);
}

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 2132 C++11 the overload ( 4 ) taking a Callable object might be ambiguous constrained
LWG 2401 C++11 assignment operator ( 3 ) from std::nullptr_t not required to be noexcept required

Смотрите также

заменяет или уничтожает целевой объект
(публичная функция-член std::move_only_function )
(удалена в C++17)
присваивает новый целевой объект
(публичная функция-член)