【发布时间】:2016-09-20 09:21:28
【问题描述】:
考虑以下代码。
#include <functional>
int main(void)
{
std::function<void()> f1;
if (f1) { /* ok */
...
}
bool b = f1; /* compile-error */
bool B = !f1; /* ok */
...
}
std::function<> 在某些情况下隐式转换为 bool,但并非在所有情况下都如此。将其分配给bool-变量不起作用,而操作的结果或在if()-语句中使用它是可以的。
为什么会这样?看来我们必须对其进行布尔运算,然后才能进行转换。
我为b = f1-line 所做的工作是好的 ol' double bang:!!。在这种现代 C++ 代码中,它看起来就像是古董。
EDIT:这也可以编译:
bool b = f1 || f1; /* OK */
【问题讨论】:
-
因为运算符 bool 被标记为显式。见en.cppreference.com/w/cpp/utility/functional/function/…
-
@wasthishelpful 这是同一个答案,但不是同一个问题。恕我直言
-
我们这里的答案更好。
-
请注意,
bool b{f1};和bool b(f1);都可以工作。
标签: c++ function c++11 implicit-conversion std-function