> 백엔드 개발 > C++ > C에서 클래스 내 데이터 멤버를 초기화하기 위해 괄호를 사용할 수 없는 이유는 무엇입니까?

C에서 클래스 내 데이터 멤버를 초기화하기 위해 괄호를 사용할 수 없는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-15 13:44:02
원래의
280명이 탐색했습니다.

Why Can't We Use Parentheses to Initialize In-Class Data Members in C  ?

클래스 내 데이터 멤버 초기화 이상: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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