>백엔드 개발 >C++ >C 초기화에는 Lvalue-Rvalue 변환이 필요합니까?

C 초기화에는 Lvalue-Rvalue 변환이 필요합니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-15 12:33:08813검색

Does C   Initialization Require Lvalue-to-Rvalue Conversion?

초기화에 Lvalue-Rvalue 변환이 수반됩니까?

초기화에 lvalue-rvalue 변환이 필요한지 여부에 대해 C 11 표준은 여전히 ​​모호합니다. . 그러나 증거에 따르면 달리 지정하지 않는 한 rvalue는 내장 연산자의 피연산자로 예상됩니다. 이 접근 방식은 이니셜라이저의 컨텍스트로 확장되었습니다.

추측: 값에 대해 예상되는 Prvalue

가정 사양은 다음을 포함하여 값이 필요한 모든 곳에서 Prvalue가 예상된다는 것입니다. 초기화 중. 이는 객체를 초기화할 때 lvalue에서 rvalue로의 변환이 필요하다는 것을 의미합니다.

추론의 결과

초기화에서 prvalue가 필요한 경우 다음이 발생합니다.

  • int x = x; lvalue-rvalue 변환을 거치며 x가 초기화되지 않았기 때문에 정의되지 않은 동작이 발생합니다.
  • int y = 0; int x = y;, 여기서 y는 lvalue입니다.
  • 일관되지 않은 동작, 예: z = y는 정의되지 않은 동작이지만 z = x는 그렇지 않습니다. x == y라고 가정합니다.

추가 증거

이 추측을 뒷받침하는 추가 증거는 다음과 같습니다.

  • 표준의 8.5/16항은 다음을 의미합니다. "표준 변환"이 필요하지만 카테고리 변환에 대해서는 언급하지 않습니다.
  • 4.1단락에서는 초기화되지 않은 개체에 lvalue-rvalue 변환을 적용할 때 정의되지 않은 동작을 언급합니다.
  • 결함 보고서에서는 4.1단락의 단어 변경을 제안합니다. 초기화되지 않은 값을 포함하여 불확실한 값을 가진 객체를 포함합니다. object.

결론

제공된 증거에 따르면 가장 가능성 있는 해석은 초기화에서 prvalue를 기대하므로 초기화되지 않은 lvalue를 초기화 프로그램으로 사용할 때 정의되지 않은 동작이 발생한다는 것입니다. . 이 해석은 달리 지정하지 않는 한 내장 연산자에서 rvalue를 기대하는 더 넓은 접근 방식과 일치합니다.

위 내용은 C 초기화에는 Lvalue-Rvalue 변환이 필요합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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