C++ 参考手册
- C++11
- C++14
- C++17
- C++20
- C++ 编译器支持情况表
- 独立与宿主实现
- C++ 语言
- C++ 关键词
- 预处理器
- C++ 标准库头文件
- 具名要求
- 功能特性测试 (C++20)
- 工具库
- 程序支持工具
- std::initializer_list
- 函数对象
- std::less
- std::mem_fn
- std::bind
- std::function
- std::not_fn
- std::bind_front
- std::function 的推导指引
- std::swap(std::function)
- std::uses_allocator<std::function>
- std::function<R(Args...)>::assign
- std::function<R(Args...)>::operator bool
- std::function<R(Args...)>::operator()
- std::function<R(Args...)>::target_type
- std::function<R(Args...)>::target
- operator==,!=(std::function)
- std::function<R(Args...)>::operator=
- std::function<R(Args...)>::swap
- std::function<R(Args...)>::function
- std::function<R(Args...)>::~function
- std::bad_function_call
- std::is_bind_expression
- std::is_placeholder
- std::placeholders::_1, std::placeholders::_2, ..., std::placeholders::_N
- std::invoke
- std::boyer_moore_searcher
- std::default_searcher
- std::identity
- std::reference_wrapper
- std::ref, std::cref
- std::unwrap_reference, std::unwrap_ref_decay
- std::plus
- std::minus
- std::negate
- std::multiplies
- std::divides
- std::modulus
- std::logical_and
- std::logical_or
- std::logical_not
- std::equal_to
- std::not_equal_to
- std::greater
- std::greater_equal
- std::less_equal
- std::bit_and
- std::bit_or
- std::bit_xor
- std::bit_not
- std::boyer_moore_horspool_searcher
- std::unary_function
- std::binary_function
- std::ptr_fun
- std::pointer_to_unary_function
- std::pointer_to_binary_function
- std::mem_fun_t, std::mem_fun1_t, std::const_mem_fun_t, std::const_mem_fun1_t
- std::not1
- std::not2
- std::bind1st, std::bind2nd
- std::mem_fun_ref_t, std::mem_fun1_ref_t, std::const_mem_fun_ref_t, std::const_mem_fun1_ref_t
- std::unary_negate
- std::binary_negate
- std::less<void>
- std::apply
- 库特性测试宏 (C++20)
- std::hash
- std::pair
- std::tuple
- std::optional
- std::any
- std::variant
- 格式化库 (C++20)
- std::integer_sequence
- std::exchange
- std::make_from_tuple
- std::launder
- std::to_chars
- std::from_chars
- std::as_const
- std::source_location
- 变参数函数
- std::bitset
- std::cmp_equal, cmp_not_equal, cmp_less, cmp_greater, cmp_less_equal, cmp_greater_equal
- std::in_range
- std::declval
- std::forward
- std::move
- std::move_if_noexcept
- std::chars_format
- std::piecewise_construct_t
- std::piecewise_construct
- std::in_place, std::in_place_type, std::in_place_index, std::in_place_t, std::in_place_type_t, std::in_place_index_t
- 注释
- 类型支持(基本类型、RTTI、类型特性)
- 概念库 (C++20)
- 错误处理
- 动态内存管理
- 日期和时间工具
- 字符串库
- 容器库
- 迭代器库
- 范围库 (C++20)
- 算法库
- 数值库
- 输入/输出库
- 文件系统库
- 本地化库
- 正则表达式库
- 原子操作库
- 线程支持库
- 实验性 C++ 特性
- 有用的资源
- 索引
- std 符号索引
- 协程支持 (C++20)
- C++ 关键词
位置:首页 > C++ 参考手册 >工具库 >函数对象 >std::function > std::function<R(Args...)>::function
std::function<R(Args...)>::function
function() noexcept; |
(1) | (C++11 起) |
function( std::nullptr_t ) noexcept; |
(2) | (C++11 起) |
function( const function& other ); |
(3) | (C++11 起) |
(4) | ||
function( function&& other ); |
(C++11 起) (C++20 前) |
|
function( function&& other ) noexcept; |
(C++20 起) | |
template< class F > function( F f ); |
(5) | (C++11 起) |
template< class Alloc > function( std::allocator_arg_t, const Alloc& alloc ) noexcept; |
(6) | (C++11 起) (C++17 中移除) |
template< class Alloc > function( std::allocator_arg_t, const Alloc& alloc, |
(7) | (C++11 起) (C++17 中移除) |
template< class Alloc > function( std::allocator_arg_t, const Alloc& alloc, |
(8) | (C++11 起) (C++17 中移除) |
template< class Alloc > function( std::allocator_arg_t, const Alloc& alloc, |
(9) | (C++11 起) (C++17 中移除) |
template< class F, class Alloc > function( std::allocator_arg_t, const Alloc& alloc, F f ); |
(10) | (C++11 起) (C++17 中移除) |
从各种资源构造 std::function
。
1-2) 构造空
function
。3-4) 复制 (3) 或移动 (4)
other
的目标到 *this 的目标。若 other
为空,则调用后 *this 将亦为空。对于 (4) , other
在调用后处于合法但未指定的状态。5) 以 std::move(f) 初始化目标。若
f
是空指针或指向成员的空指针,则 *this 在此调用后将为空。此构造函数不参与重载决议,除非 f 对于参数类型 Args...
和返回类型 R
可调用 (Callable) 。 (C++14 起)6-10) 同 (1-5) ,除了将
alloc
用于分配任何 function
会用到的内部数据结构的内存。目标是函数指针或 std::reference_wrapper 时,保证使用小对象优化,即始终直接存储这些目标于 std::function 对象中,不发生动态内存分配。可以构造其他大对象于动态分配的存储中,并由 std::function 对象通过指针访问。
参数
other | - | 用于初始化 *this 的函数对象 |
f | - | 用于初始化 *this 的可调用对象 |
alloc | - | 用于内部内存分配的分配器 (Allocator) |
类型要求 | ||
-F 必须满足可调用 (Callable) 和 可复制构造 (CopyConstructible) 的要求。
| ||
-Alloc 必须满足分配器 (Allocator) 的要求。
|
异常
3,8,9) 若
other
的目标是函数指针或 std::reference_wrapper 则不抛出异常,否则可能抛出 std::bad_alloc 或用于复制或移动存储的可调用对象的构造函数所抛的异常。
4) 若
other 的目标是函数指针或 std::reference_wrapper 则不抛出异常,否则可能抛出 std::bad_alloc 或用于复制或移动存储的可调用对象的构造函数所抛的异常。 |
(C++20 前) |
注意
std::function
的分配器支持说明贫乏,且实现不一致。一些实现完全不提供重载 (6-10) ,一些提供重载但忽略提供的分配器参数,而一些实现提供重载并将提供的分配器用于构造,但不在重赋值 std::function
时使用。结果, C++17 中移除了分配器支持。
示例
本节未完成 原因:暂无示例 |