什么是'valid' std::function?

what is a 'valid' std::function?

本文关键字:function std 什么 valid      更新时间:2023-10-16

这里:

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显然不会。