> 백엔드 개발 > C++ > C 연산자의 오른쪽에 초기화 목록을 사용할 수 없는 이유는 무엇입니까?

C 연산자의 오른쪽에 초기화 목록을 사용할 수 없는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-09 01:19:13
원래의
702명이 탐색했습니다.

Why Can't I Use Initializer Lists on the Right-Hand Side of C   Operators?

RHS의 연산자 오버로딩 및 초기화 목록

C 프로그래밍에서 초기화 목록은 표현식 목록으로 집계 개체를 초기화하는 간결한 구문입니다. . 이니셜라이저 목록은 다양한 시나리오에서 편리하게 사용할 수 있지만 연산자의 오른쪽(RHS)에서의 사용은 논의 대상이었습니다.

왜 이니셜라이저 목록이 RHS에서 제한되는지

C 11은 이항 연산자 <<를 포함하여 연산자의 RHS에 초기화 목록을 허용하지 않습니다. 귀하의 코드에 사용됩니다. 이러한 제한에는 몇 가지 이유가 있습니다.

  • 초기화 목록은 표현식이 아닙니다. C 표준에 따르면 초기화 목록은 표현식으로 간주되지 않습니다. 이진 연산자 인수는 일반적으로 표현식이며 표현식에 정의된 문법은 이니셜라이저 목록을 제외합니다.
  • 파서 과제: 연산자의 왼쪽(LHS)에 이니셜라이저 목록을 허용하면 문법적인 문제가 발생합니다. . LHS 및 RHS 위치 모두에서 초기화 목록을 허용하는 경우 표현식의 표준 문법이 모호해질 수 있습니다.

초기화 목록 예외

일반 제한에도 불구하고 연산자 인수에 초기화 목록을 사용하면 C는 초기화 목록이 다음과 같은 특정 예외를 정의합니다. 허용됨:

  • 함수에 대한 인수
  • 배열 액세스 표현식의 첨자로
  • 생성자에 대한 인수
  • 반환 문에서
  • 변수 정의의 초기화자로

코드에서 << 연산자:

foo baz;
baz << bar{1, -2, "foo", 4, 5}; // Legal
로그인 후 복사

제한 이유

연산자의 RHS에서 초기화 목록을 제한하기로 한 결정은 일관되고 명확한 문법을 ​​유지하려는 욕구에서 비롯됩니다. 모든 컨텍스트에서 이니셜라이저 목록을 허용하면 언어에 추가적인 복잡성과 잠재적인 모호성이 발생하게 됩니다.

귀하의 질문에 언급된 토론 문서에서 언급한 대로 RHS에서는 이니셜라이저 목록을 허용하고 LHS에서는 허용하지 않는 대안이 고려되었습니다. 너무 문제가 많습니다. 따라서 특정 컨텍스트에서만 초기화 목록을 허용하는 보수적인 접근 방식이 선택되었습니다.

위 내용은 C 연산자의 오른쪽에 초기화 목록을 사용할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿