Braceed-Init-List 반환 값의 수명
C에서 함수에서 Braced-init-list를 반환하면 다음에 대한 질문이 제기됩니다. 초기화_목록 및 해당 기본 배열의 수명.
문제 개요
이전 분석에 따르면 GCC는 반환 표현식이 끝나기 전에 초기화_목록 배열을 잘못 종료하는 반면 Clang은 객체를 파괴하지 않고 잘못 보존합니다.
표준 해석
C 11 표준에 따르면 중괄호 초기화 목록이 있는 반환 문은 다음을 통해 반환 값을 초기화합니다. 사본 목록 초기화. 반환 유형이 std::initializer_list의 특수화인 경우 초기화_목록 객체는 지정된 목록에서 구성되고 초기화됩니다.
배열 수명
구성된 초기화_목록은 초기화 목록에서 초기화된 요소 배열에 대한 참조입니다. 배열의 수명은 초기화_목록 개체와 동일하도록 정의됩니다. 이는 return 문에서 기본 배열이 Braced-init-list에서 초기화되고 수명이 호출 범위까지 확장된다는 것을 의미합니다.
올바른 구현
따라서 예상되는 동작은 초기화_목록의 배열이 호출 함수에 유지되어 추가 사용이나 명명된 참조에 대한 바인딩을 허용해야 한다는 것입니다. 그러나 GCC의 현재 구현은 배열 할당을 조기에 해제하여 이러한 기대를 위반합니다.
추가 설명
위 내용은 C 함수에서 반환된 Braced-Init-List의 수명은 얼마나 됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!