`decltype`에 이중 괄호를 사용하면 결과 유형이 변경되는 이유는 무엇입니까?
Oct 31, 2024 am 11:15 AMdecltype에서 이중 괄호를 사용한 유형 추론
C에서는 decltype 키워드를 사용하여 표현식의 유형을 결정할 수 있습니다. 이중 괄호와 함께 사용하면 혼란을 초래할 수 있는 미묘한 동작을 보입니다.
문제:
다음 코드 조각을 고려하세요.
<code class="cpp">const int&&& foo(); int i; struct A { double x; }; const A* a = new A(); decltype(foo()) x1 = i; // type is const int&&& decltype(i) x2; // type is int decltype(a->x) x3; // type is double decltype((a->x)) x4 = x3; // type is const double&</code>
로그인 후 복사
네 번째 줄의 a->x에 괄호를 추가하면 결과 유형이 double에서 const double&로 변경되는 이유는 무엇입니까?
답변:
설명은 다음에 있습니다. decltype을 사용하여 유형을 추론하는 규칙. C 언어 표준에 따르면:
- e가 괄호로 묶이지 않은 식별자이거나 클래스 멤버 액세스인 경우 decltype(e)는 e가 명명한 엔터티의 유형을 반환합니다.
- e가 은 l값이고, decltype(e)는 T&를 반환합니다. 여기서 T는 e의 유형입니다.
주어진 예에서:
- decltype(a->x) a->x를 클래스 멤버 액세스로 해석하여 double 유형이 됩니다.
- decltype((a->x))는 (a->x)를 lvalue로 해석하여 a가 됩니다. const double& 유형.
따라서 a->x에 괄호를 추가하면 액세스된 멤버 유형에서 유형 공제가 멤버 자체에 대한 참조로 변경됩니다.
위 내용은 `decltype`에 이중 괄호를 사용하면 결과 유형이 변경되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

인기 기사
Repo : 팀원을 부활시키는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
스플릿 소설을이기는 데 얼마나 걸립니까?
3 몇 주 전
By DDD
R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
헬로 키티 아일랜드 어드벤처 : 거대한 씨앗을 얻는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌

인기 기사
Repo : 팀원을 부활시키는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
스플릿 소설을이기는 데 얼마나 걸립니까?
3 몇 주 전
By DDD
R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
헬로 키티 아일랜드 어드벤처 : 거대한 씨앗을 얻는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 기사 태그

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제
Gmail 이메일의 로그인 입구는 어디에 있나요?
7283
9


자바 튜토리얼
1622
14


Cakephp 튜토리얼
1342
46


라라벨 튜토리얼
1259
25


PHP 튜토리얼
1205
29



C 언어 함수에 의해 반환 된 값 유형은 무엇입니까? 반환 값을 결정하는 것은 무엇입니까?

STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까?
