2013-07-20 4 views
-1

C++ 11에서 그 불쾌한 규칙을 없애 버렸기 때문에 필자는 정적 const int/char/enum이 허용되었다고 생각합니다. 헤더에서 초기화 할 수 있지만 다른 모든 유형에서는 couldnt 할 수 있습니다. 이 때문에 C++에 대한 선언 및 정의 규칙을 요약하고 요약하려고했습니다.선언에 대한 C++ 저장소 클래스 및 한정자 규칙 정의

내가 시도/수행 한 것을 누군가가 받아 들일 수 있고 내가 놓치거나 부정확 한 내용으로 확장 할 수 있습니까? 다양한 static/const/int/non-int 변수에 대한 선언과 정의에 대한 모든 "규칙"을 요약하고 싶습니다. 데이터의 유형/선언/defining-하지만 난 여기에을에하는 방법을 잘 모릅니다 : 이상적이 3 열이 어떤 종류의 테이블에 넣을 수

정적 데이터 멤버 (선언)

  • 동일한 헤더를 사용하는 여러 파일이 하나 이상의 복사본을 생성하므로 초기화하지 마십시오. 형식과 이름 만 제공하십시오.

정적 데이터 부재 (정의)

  • 소스 파일의 변수를 초기화한다. 소스 파일 정의에서 "정적"이라는 단어를 반복하지 않아도됩니다. (선언)

const를 데이터 멤버

  • 선언하지만 키워드를 const 사용하여 헤더 파일에 초기화되지 않았습니다.

CONST 데이터 부재 (정의)

  • 생성자에서 초기화리스트를 사용하여 초기화해야. (선언)

정적 CONST 데이터 부재

  • 정적 및 CONST하지만 초기화되지 키워드 헤더 파일 선언. 소스 파일에 정의

정적 CONST 데이터 부재 (정의)

  • . 키워드 static 및 const (??)를 사용할 필요가 없습니다.

NB : 나는 그들이 헤더에 초기화 될 수있는 한, 정적에 대한 특별한 규칙이 (? 또는 const 정적이었다)하는 데 사용되는 사전 C++ 11 INT/열거/문자를 이해? ?통근

  • 에 대한 가변
  • 규칙 글로벌 변수에 대한

    • 규칙
    • 규칙 휘발성는 "const를"완전히 같은 규칙을 따라야합니까? 정적 volatile은 정적 데이터 멤버 등의 규칙을 따릅니다.
  • +1

    비 정적 데이터 멤버의 클래스 초기화를 허용하는 C++ 11에 대해 아직 알지 못했을 것입니다. – Casey

    +0

    소스를 검토해야합니다. * 선언 *과 * 정의 *가 실제로 의미하는 것을 이해하십시오 –

    답변

    0

    C++ 표준에서 constvolatile은 거의 항상 "서로 옆에 있습니다". 특히 volatileconst은 같은 우선 순위와 "위치 필요"가 있습니다.

    PreC++ 11 (물론 C++ 11에서도) const static의 간단한 유형 (예 : int 또는 밀접하게 관련된 유형은 초기화 할 수 있지만 다른 유형 (생성자, 예를 들어)

    +0

    정적 const 멤버에 값을 제공하는 규칙은 좀 더 복잡하고 * constructor *의 존재 여부는 기준이 아니라 정적 const 멤버가 * 정수 * 또는 * 열거 형 (const char *도 포함하지 않음) –

    +0

    @ DavidRodríguez-dribeas : 좋아요, 편집했습니다. –