6

这里:

http://en.cppreference.com/w/cpp/utility/functional/function

operator bool描述:“检查存储的可调用对象是否有效”。

大概构造的默认值std::function无效,但这是唯一的情况吗?

另外,它如何检查它是否有效?

是否operator()会引发std::bad_function_call对象无效的情况?

4

2 回答 2

7

它写得不好,你的困惑是有道理的。“有效”是指“有目标”。

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

他们应该在使用之前定义“有效”,或者只是坚持使用官方措辞。

于 2012-08-09T16:39:40.093 回答
1

语言标准说

explicit operator bool() const noexcept;

返回:如果 *this 有一个目标,则返回 true,否则返回 false。

意思是function有什么可以打电话的。默认构造function显然没有。

于 2012-08-09T16:39:11.620 回答