클래스 내 초기화의 모호성 방지
클래스 내 초기화를 중괄호로 묶거나 할당 연산자(=)? 괄호를 사용할 수 있는 메서드 선언과 달리 클래스 내 초기화는 이 특정 구문을 준수해야 합니다.
제한의 근거
이 제한은 잠재적인 구문을 회피하기 위한 것입니다. 모호. 다음 클래스 정의를 고려하십시오.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!