什么是'valid' std::function?
what is a 'valid' std::function?
这里:
http://en.cppreference.com/w/cpp/utility/functional/function
operator bool
描述为:"检查存储的可调用对象是否有效"。
据推测,默认构造std::function
无效,但这是唯一的情况吗?
另外,它如何检查它是否有效?
operator()
引发的情况是否std::bad_function_call
对象无效的情况?
它写得很差,你的困惑是有道理的。他们所说的"有效"是指"有一个目标"。
std::function
在被分配函数时"有一个目标":
std::function<void()> x; // no target
std::function<void()> y = some_void_function; // has target
x = some_other_void_function; // has target
y = nullptr; // no target
x = y; // no target
他们应该在使用"有效"之前定义"有效",或者干脆坚持官方措辞。
语言标准说
explicit operator bool() const noexcept;
返回:如果 *这有一个目标,则为 true,否则为 false。
这意味着function
有什么要调用的。默认构造function
显然不会。
相关文章:
- 库函数需要一个 std::function<void(void)>,如何传入类函数?
- Confusion: decltype vs std::function
- 为什么 std::function 可以作为 std::not2 的参数?
- 'max'匹配'std::function<const int &(const int &, const int &)>'无过载
- 传递给std::function template的template参数究竟代表什么
- 将带有unique_ptr的可变 lambda 传递给 const&std::function
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 如何在向量中删除 std::function<void()>?
- 将函数包装器转换为 std::function
- 类型擦除的std::function与虚拟函数调用的开销
- C++ std::function 对于类 exept 的所有实例都是空的(只有 Visual2019 编译器问题)
- 如果模板没有可变参数,则 Lambda 被推导出为 std::function
- 将 lambda 表达式传递给 std::function in C++
- 广义 std::function (std::any 表示可调用对象)
- std::function<std::optional<T>()> 如何与返回 T 的 lambda 兼容?
- std::function std::bind with lambda overload ambiguity
- Clang bug with std::function, std::bind and std::ref?
- 为什么我会收到编译错误"use of deleted function 'std::unique_ptr ..."
- 为什么我不能让 std::function<std::vector<T>::iterator> 绑定到返回该类型的 lambda?
- 回调(std::function/std::bind)与接口(抽象类)的优缺点