这里:
http://en.cppreference.com/w/cpp/utility/functional/function
operator bool
描述:“检查存储的可调用对象是否有效”。
大概构造的默认值std::function
无效,但这是唯一的情况吗?
另外,它如何检查它是否有效?
是否operator()
会引发std::bad_function_call
对象无效的情况?
这里:
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;
返回:如果 *this 有一个目标,则返回 true,否则返回 false。
意思是function
有什么可以打电话的。默认构造function
显然没有。