>  기사  >  백엔드 개발  >  `decltype((...))`에서 괄호의 영향은 무엇입니까?

`decltype((...))`에서 괄호의 영향은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-03 05:38:30338검색

 What's the Impact of Parentheses in `decltype((...))`?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.