>백엔드 개발 >C++ >중괄호로 묶인 구문을 사용하여 클래스 데이터 멤버를 초기화할 수 없는 이유는 무엇입니까?

중괄호로 묶인 구문을 사용하여 클래스 데이터 멤버를 초기화할 수 없는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-16 08:30:03702검색

Why Can't Class Data Members Be Initialized Using Brace-Enclosed Syntax?

클래스 데이터 멤버 직접 초기화 구문이 금지된 이유

C에서는 ( ) 중괄호로 묶인 구문. 다음 코드를 고려해보세요.

class test {
public:
    void fun() {
        int a(3);
        std::cout << a << '\n';
    }

private:
    int s(3);    // Compiler error
};

    "숫자 상수 앞에 예상 식별자"
  • "예상 ',' 또는 '와 같은 오류가 발생하여 컴파일이 실패합니다. ..' 숫자 상수 앞에 "
그러면 왜 이런 제한이 적용되나요?

초기 C 제안과 표준 토론에 따르면 금지의 목적은

파싱 모호성을 방지하는 것입니다. . 중괄호로 묶인 초기화가 허용된 경우 컴파일러는 다음과 같은 상황에서 선언을 잠재적으로 잘못 해석할 수 있습니다.

struct S {
    int i(x); // data member with initializer
    // Other code
    static int x;
};
여기서 i(x)가 데이터 멤버 이니셜라이저인지 멤버 함수 선언인지는 둘 다 다음과 같이 명확하지 않습니다. 동일한 구문입니다.

이 모호성을 해결하기 위해 C는 다음 제한 사항을 선택했습니다.

    데이터 멤버는 = 초기화 절 또는 { 초기화 목록 } 구문을 사용하여 초기화되어야 합니다. .
  • 멤버 함수는 선언에 항상 () {} 구문을 사용해야 합니다.
이 결정은 구문 분석 문제를 방지하고 코드의 명확성을 보장합니다.

위 내용은 중괄호로 묶인 구문을 사용하여 클래스 데이터 멤버를 초기화할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.