什么是'有效'std ::函数?

时间:2012-08-09 16:30:49

标签: c++ c++11 std-function

下面:

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

描述了

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

据推测,默认构造的std::function无效,但这是唯一的情况吗?

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

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

2 个答案:

答案 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显然没有。