2016-11-01 5 views
3

이 구문은 무엇인가 Stroustrup 교수의 저서 The C++ Programming Language 4th ed. 930 페이지의 해시 함수와 동등성 함수를 설명합니다.템플릿 유형으로 변환

std::hash<int>{}(variable) //variable is of type int 

int에서 해시로 캐스팅 되었습니까? 그런데 왜 해시 후의 꽃 괄호는 어떨까요? 변수 기본값 뒤에 값을 배치하면 초기화된다는 것을 알고 있습니다. 주물에 관해서는 우리는 일반적으로 double (int)과 같이 캐스팅합니다!

답변

8

는 그 구성 요소들로 std::hash<int>{}(variable)을 깰 수 있습니다 :

  • std::hash<int>을 -이 유형입니다, 그것은 standard hash template의 특정 유형입니다.

  • {} - 이렇게하면 std::hash<int> 클래스의 인스턴스가 만들어집니다.

  • (variable) - 이전에 생성 된 인스턴스에 function call operator을 호출하여 variable을 인수로 전달합니다.

표현 후, std::hash<int>의 인스턴스가 파괴됩니다. 예를 들어

:

std::size_t hash = std::hash<int>{}(variable); 

std::size_t hash; 
{ 
    std::hash<int> hashing_temporary_object; 
    hash = hashing_temporary_object(variable); 
    // The above call is equal to hashing_temporary_object.operator()(variable) 
} 
+1

아마도 브레이스 초기화를 설명하십시오. –

+0

두 번 읽어야했습니다. 잠시 동안 나는 함수 정의라고 생각했다. :) 좋은 대답. – wally

+0

그 구문은 함수 스타일 캐스팅이 그의 책에서 다른 곳에 설명되어 있고, 해시 템플리트에 함수 호출 연산자가 있다고 언급 할 때까지 생각했습니다. –

0

std::hash<int>{} 함수 객체를 생성과 거의 동일하다. "꽃이 만발한"또는 중괄호라고해도이 문제는 초기화됩니다.

그런 다음 int과 함께 함수를 호출하십시오.

1

std::hash은 클래스 템플릿입니다. <int>은 템플리트에 템플리트 인수를 제공합니다. std::hash<int>은 클래스 템플릿의 특수화에 의해 생성되는 유형입니다. std::hash<int>{}은 기본값 - 해당 유형의 값을 생성합니다. std::hash<int>{}(variable)은 클래스의 operator()을 호출하여 주어진 숫자의 해시를 평가합니다.

관련 문제