다음 코드를 고려하세요.
<code class="cpp">#include <stdio.h> struct P2d { double x, y; P2d(double x, double y) : x(x), y(y) {} ~P2d() { printf("Destructor called\n"); } }; P2d center() { return P2d(10, 10); } int main(int argc, const char *argv[]) { const double& x = center().x; printf("x = %.18g\n", x); return 0; }</code>
이 예에서는 center() 임시 P2d 개체를 반환합니다. 질문이 생깁니다: 이 임시 개체의 수명은 얼마나 됩니까?
각 컴파일러는 서로 다른 동작을 나타냅니다.
C 표준에 따르면 임시 항목의 하위 개체에 대한 참조를 바인딩해도 임시 항목의 수명이 연장되지 않습니다. . 그러나 이는 그러한 경우 수명을 연장하는 변경을 제안하는 CWG 1651에 포함됩니다.
현재 상태에서는 prvalue만 임시 항목을 참조하는 것으로 간주됩니다. 그러나 center().x와 같은 멤버 액세스 표현식은 g 및 clang 모두에서 prvalue로 간주됩니다.
향후 결의안에서는 멤버 액세스 표현식이 임시 표현식을 생성하고 이러한 표현식에 대한 참조를 바인딩하면 해당 임시 개체의 수명이 연장된다는 점을 명확히 할 것입니다.
위 내용은 ## 임시의 하위 개체에 대한 상수 참조를 바인딩하면 수명이 연장되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!