下面:
http://en.cppreference.com/w/cpp/utility/functional/function
描述了 operator bool
:“检查存储的可调用对象是否有效”。
据推测,默认构造的std::function
无效,但这是唯一的情况吗?
另外,它如何检查它是否有效?
是否operator()
完全引发std::bad_function_call
对象无效的情况?
答案 0 :(得分: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
他们应该在使用之前定义“有效”,或者只是坚持使用官方措辞。
答案 1 :(得分:1)
语言标准说
explicit operator bool() const noexcept;
返回:如果* this有目标,则返回true,否则返回false。
意味着function
有任何要调用的东西。默认构造的function
显然没有。