次のコードを検討してください。C++ 11ではstd :: functionが暗黙的にboolに変換されないのはなぜですか?
#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
-variableに割り当てることはできませんが、操作の結果またはif()
-文で使用するとOKです。
なぜそうですか?ブール演算をしなければならないようですが、変換が機能します。
私が仕事をしたのは、b = f1
ラインでしたが、good ol 'double bang:!!
です。このような現代のC++コードではアンティークのようです。
EDIT:これは、同様にコンパイル:
オペレータboolは明示的にマークされているためです。 http://en.cppreference.com/w/cpp/utility/functional/function/operator_bool –
@wasthishelpful同じ答えですが、同じ質問ではありません。 IMHO –
私たちの答えは良いです。 –