C에서 ++ 규격 초안 N3337 : 다음decltype의 동작이 정의 된 이유는 무엇입니까?
7.1.6.2 간단한 형태 지정자
4
decltype(e)
가리키는 유형 정의된다-
e
가 호로 -이지 ID-이면 표현 또는 괄호 안의 반원 멤버 액세스 (5.2.5) 인 경우decltype(e)
은e
이라는 이름의 엔티티 유형입니다. 그러한 엔티티가 없거나e
이 오버로드 된 함수 집합을 명명하면 프로그램이 잘못 구성됩니다.- 그렇지 않으면 e가 x 값인 경우
decltype(e)
은T&&
이고T
은e
유형입니다.- 그렇지 않으면 e가 lvalue 인 경우
decltype(e)
은T&
이고T
은e
유형입니다. 왜decltype(*ap)
단지int
을 수 없었다, 설명 일부 문서에
내가 제대로 위를 이해한다면,
int a;
decltype(a) b = 10; // type of b is int
int* ap;
decltype(*ap) c = 10; // Does not work since type of c is int&
당신이 설명 할 수 또는 포인트?
이미 알고 계시 겠지만, 레코드에 대해서는'std :: remove_reference' 또는'std :: remove_pointer'를 사용하여 수정할 수 있습니다. – 101010
@ 40two, 네, 그 유틸리티에 대해 알고 있습니다. 저는 왜 언어가 그것이 정의 된 방식으로 정의되는지 이해하려고 노력하고 있습니다. –
나는 당신이이 전제에서 보통 용의자이기 때문에 당신이 그것을 안다는 것을 알았습니다. 생각해 볼 수있는 주된 이유는 후행 반환에서'decltype '을 사용하기위한 것입니다. 형식에서'&'를 제거하면 내가 뒤 따르는 반환에 불편할 수 있습니다. – 101010