decltype((...))의 이중 괄호는 무엇을 의미합니까?
C 표준은 decltype(( ...)) FCD 섹션 7.6.1.2/4의 구문. 이 구문을 사용하면 프로그래머는 다음 예에서 볼 수 있듯이 표현식 유형을 추론할 수 있습니다.
<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>
decltype((a->x))의 표현식 주위에 괄호가 있으면 큰 차이가 납니다. 추론형으로요. 괄호가 없으면 유형은 단순히 double이며 멤버 액세스의 반환 유형(a->x)을 나타냅니다.
그러나 괄호가 있으면 표현식은 lvalue가 됩니다. 표준에 따르면 e가 lvalue인 경우 decltype(e)는 T&입니다. 여기서 T는 e의 유형입니다. 이 경우 T는 double이므로 추론된 유형은 const double&입니다.
따라서 decltype((a->x))의 괄호는 추론에서 표현식을 lvalue로 처리하도록 강제합니다. 괄호가 생략된 경우와 다른 유형으로 표시됩니다.
위 내용은 `decltype((...))`에서 괄호의 영향은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!