C ++ 17 표준 초안 은 파일 범위 에서 const암시 static합니다.
https://stackoverflow.com/a/3709257/895245 에서 언급 한 내용에 대한 인용문입니다.
C ++ 17 n4659 표준 초안 6.5 "프로그램 및 링크":
3 네임 스페이스 범위 (6.3.6)를 가진 이름은 이름이
- (3.1) — 명시 적으로 정적으로 선언 된 변수, 함수 또는 함수 템플릿; 또는,
- (3.2) — 명시 적으로 extern으로 선언되지 않았거나 외부 연결을 갖도록 선언되지 않은 비 휘발성 const 한정 타입의 비 인라인 변수 또는
- (3.3) — 익명 공용체의 데이터 멤버.
부록 C (정보) 호환성, C.1.2 6 절 : "기본 개념"은 이것이 C에서 변경된 이유에 대한 근거를 제공한다.
6.5 [또한 10.1.7]
변경 : 명시 적으로 선언 된 const이고 명시 적으로 extern으로 선언되지 않은 파일 범위의 이름에는 내부 연결이 있지만 C에서는 외부 연결이 있습니다.
이론적 근거 : const 객체는 C ++로 변환하는 동안 값으로 사용될 수 있으므로이 기능을 사용하면 프로그래머가 각 const 객체에 대해 명시적인 초기화를 제공해야합니다. 이 기능을 통해 사용자는 const 객체를 둘 이상의 번역 단위에 포함 된 소스 파일에 넣을 수 있습니다.
원래 기능에 미치는 영향 : 잘 정의 된 기능의 의미로 변경합니다.
변환의 어려움 : 의미 론적 변환.
얼마나 널리 사용됩니까?
참조 : const가 C에없는 경우 const가 C ++의 내부 연결을 의미하는 이유는 무엇입니까?
헤더 대신 할 일
에서 자세히 설명 : 무엇 CONST 정적 '평균 C 및 C ++합니까?
- pre C ++ 17 :
extern헤더, cpp 파일의 정의
- post C ++ 17 : 헤더의 인라인 변수
static아마도 C ++에서 가장 많이로드 된 키워드 일 것입니다. 코드의 의미는 네임 스페이스 범위, 클래스 범위 또는 함수 범위에 따라 크게 다릅니다. 당신은 그것을 명확히하고 싶을 수도 있습니다.