다음 코드를 고려하십시오.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
- 라인이며 이중 쾅 : !!
입니다. 그런 현대 C++ 코드에서 골동품처럼 보입니다.
편집이뿐만 아니라 컴파일 : std::function::operator bool이 explicit
변환 기능입니다
bool b = f1 || f1; /* OK */
연산자 bool이 명시 적으로 표시되어 있기 때문입니다. http://en.cppreference.com/w/cpp/utility/functional/function/operator_bool –
@wasthishelpful 동일한 대답이지만 동일한 질문은 아닙니다. IMHO –
우리의 대답이 더 좋습니다. –