> 백엔드 개발 > C++ > 클래스 내 초기화가 중괄호나 할당 연산자로 제한되는 이유는 무엇입니까?

클래스 내 초기화가 중괄호나 할당 연산자로 제한되는 이유는 무엇입니까?

DDD
풀어 주다: 2024-12-21 06:43:14
원래의
457명이 탐색했습니다.

Why Are In-Class Initializers Restricted to Curly Braces or the Assignment Operator?

클래스 내 초기화의 모호성 방지

클래스 내 초기화를 중괄호로 묶거나 할당 연산자(=)? 괄호를 사용할 수 있는 메서드 선언과 달리 클래스 내 초기화는 이 특정 구문을 준수해야 합니다.

제한의 근거

이 제한은 잠재적인 구문을 회피하기 위한 것입니다. 모호. 다음 클래스 정의를 고려하십시오.

class BadTimes {
    struct Overloaded;
    int Overloaded;            // Strange but legal data member

    int confusing(Overloaded); // Function declaration or data member initialization?
};
로그인 후 복사

클래스 내 초기화에 괄호가 허용된 경우 이 코드는 모호성을 초래할 수 있습니다. 한편으로는 "int 혼란스러운(오버로드);"라는 줄이 있습니다. Overloaded 유형의 매개변수를 받아들이고 int를 반환하는 함수 선언으로 해석될 수 있습니다. 반면에 Overloaded 데이터 멤버의 값을 사용하여 int 유형의 데이터 멤버 초기화로 읽을 수도 있습니다. (이는 악명 높은 "가장 짜증나는 구문 분석" 문제와 관련이 있습니다.)

중괄호로 모호성 제거

중괄호 사용을 강제하면 이 모호함이 제거됩니다.

class BadTimes {
    struct Overloaded;
    int Overloaded;            // Strange but legal data member

    int confusing{Overloaded}; // Clearly a data member initialization
};
로그인 후 복사

이제 혼란스러운 것이 int는 함수 선언으로 해석할 범위가 없기 때문에 Overloaded 값으로 명시적으로 초기화됩니다.

이 구문 제한은 명확하고 모호하지 않은 클래스 정의를 보장하여 구문 혼란으로 인해 발생하는 의도하지 않은 결과를 방지합니다.

위 내용은 클래스 내 초기화가 중괄호나 할당 연산자로 제한되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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