2012-08-09 2 views
6

:'유효한'std :: function이란 무엇입니까? 여기

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

operator bool 설명된다 : "저장된 객체 호출이 유효 여부를 체크한다."

아마도 기본 구성 인 std::function은 유효하지 않지만 이것이 유일한 경우입니까?

또한 유효한 지 여부를 어떻게 확인합니까?

operator()std::bad_function_call이 유효하지 않은 경우 일 수 있습니까? *이, 그렇지 않은 경우는 false 목표를 가지고있는 경우는 true :

답변

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 

그들은이 있어야를하거나 그들이 그것을 사용하거나 공식 문구와 함께 붙어 전에 정의 "유효".

+0

OK, 유효성 검사는 형식 검사 일 뿐이며'std :: function'을 기본 호출로 호출하는 것은 정확히'std :: bad_function_call'이 발생한 경우입니다. – dpj

+0

@ user710408 : "유효성 검사는 유형 검사"라는 것이 무슨 뜻인지 알지 못합니다. 실행 시간에 유효성 (이제는 "has a target"을 가정)이 결정되면 컴파일시에 유형 확인이 수행됩니다. 그리고 잘못된 함수 호출은 함수가 유효하지 않거나 (타겟이 없음), 기본 구성에서부터 또는 명시 적으로'nullptr '로 지정되어서 발생합니다. – GManNickG

+0

나는 내가 어느 의미인지를 알지 못했다고 생각한다! 감사합니다 :) – dpj

1

언어 표준은

explicit operator bool() const noexcept;

반환 말한다.

function에 전화 할 내용이 있음을 의미합니다. 구성된 function은 분명히 그렇지 않습니다.