클래스 내 데이터 멤버 초기화 이상: C 표준 탐구
()를 사용하여 직접 초기화할 수 있는 로컬 데이터 멤버와는 달리 구문, 클래스 내 데이터 멤버는 이 편리한 방법을 무시합니다. 이러한 특징은 많은 프로그래머를 당황하게 하여 그 근본적인 근거에 대한 의문을 불러일으켰습니다.
C 표준에 따르면 ()를 사용하여 클래스 데이터 멤버를 직접 초기화하는 것은 구문 분석 모호성을 방지하기 위해 금지되어 있습니다. 다음 시나리오를 고려하십시오.
class S { public: int i(x); // data member with initializer };
제한이 없으면 선언이 이니셜라이저가 있는 데이터 멤버를 참조하는지 아니면 멤버 함수 선언을 참조하는지 확인하려고 할 때 컴파일러가 당황할 수 있습니다.
예를 들어:
struct S { int i(j); // member function declaration int j; // data member without an initializer };
모호한 상황에서 데이터 멤버보다 멤버 함수를 우선시하는 기존 구문 분석 규칙을 적용하면 다음과 같은 문제가 발생할 수 있습니다. 잘못된 해석. 이러한 혼란을 피하기 위해 C 표준은 클래스 데이터 멤버의 직접 초기화를 허용하지 않기로 결정했습니다.
그럼에도 불구하고 = 초기화 절 구문을 사용하는 등의 대체 초기화 방법은 계속 사용 가능합니다.
int s = 3;
또는 중괄호로 묶인 초기화 목록:
int s{3};
이러한 방법을 준수함으로써, 프로그래머는 비록 로컬 멤버와는 다른 구문을 사용하더라도 클래스 데이터 멤버를 효과적으로 초기화할 수 있습니다.
위 내용은 C에서 클래스 내 데이터 멤버를 초기화하기 위해 괄호를 사용할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!