Specifier
제한자
- 제한자는 크게 Strorage Class Specifier(기억 공간 제한자)와 cv Specifier(\(\texttt{const-volatile}\) 제한자)로 분류된다.
Storage Class Specifier (기억 공간 제한자)
\(\texttt{register}\)
\(\texttt{static}\)
\(\texttt{extern}\)
\(\texttt{mutable}\)
\(\texttt{thread_local}\) (C++11 이상)
※ \(\texttt{auto}\) 키워드는 C++11부터 제한자가 아닌 데이터형의 역할을 수행한다.
\(\texttt{register}\) Specifier
- C++11 이전 버전에서는 레지스터 기억 공간을 지정하는 선언에 사용되는 키워드였다.
- C++11 이후부터는 단순하게 자동 변수임을 나타내는 명시적 표현방법으로 사용되고 있다.
* 참조 ("Register Variable (레지스터 변수)" 파트 참고)
\(\texttt{static}\) Specifier
- File Scope(Global Scope; 파일 범위 선언)에 사용시에는 변수가 Internal Linkage(내부 링크)를 갖게 하며,
지역 변수(블록 내에 위치하는)를 선언할 때 사용하면 링크를 갖지 않는 Static Storage Duration(정적 기억 존속 시간)을 갖게 한다.
\(\texttt{extern}\) Specifier
- 다른 파일에서 정의된 External Variable(External Linkage Stroage Duration을 갖는 외부 변수)을 현재 파일에서 사용하고자 할 때 선언하는 키워드이다
\(\texttt{mutable}\) Specifier
- 구조체나 클래스가 \(\texttt{const}\)로 선언되었다 할지라도, 해당 객체의 특정 멤버를 변경가능하게 만드는 키워드이다.
* Mutable : a.변하기 쉬운, 변덕스러운
Ex. \(\texttt{mutable}\) 키워드 사용 예시
struct data {
char name[30];
mutable int accesses;
...
};
const data veep = {"Claybourne Clodde", 0, ...}; // const 객체임에 유의!
strcpy(veep.name, "Joye Joux"); // 허용되지 않는다! 객체 veep는 const를 통해 선언되었으므로 기본적으로 수정이 불가능한 객체이다.
veep.Accesses++; // 허용된다! accesses 멤버는 mutable을 통해 변경이 가능한 멤버이다.
\(\texttt{thread_local}\) Specifier
- 변수의 존속 시간을 쓰레드의 존속 시간과 일치시키고자 할 때 사용하는 키워드이다.
Specifier
제한자
- 제한자는 크게 Strorage Class Specifier(기억 공간 제한자)와 cv Specifier(\(\texttt{const-volatile}\) 제한자)로 분류된다.
Storage Class Specifier (기억 공간 제한자)
\(\texttt{register}\)
\(\texttt{static}\)
\(\texttt{extern}\)
\(\texttt{mutable}\)
\(\texttt{thread_local}\) (C++11 이상)
※ \(\texttt{auto}\) 키워드는 C++11부터 제한자가 아닌 데이터형의 역할을 수행한다.
\(\texttt{register}\) Specifier
- C++11 이전 버전에서는 레지스터 기억 공간을 지정하는 선언에 사용되는 키워드였다.
- C++11 이후부터는 단순하게 자동 변수임을 나타내는 명시적 표현방법으로 사용되고 있다.
* 참조 ("Register Variable (레지스터 변수)" 파트 참고)
\(\texttt{static}\) Specifier
- File Scope(Global Scope; 파일 범위 선언)에 사용시에는 변수가 Internal Linkage(내부 링크)를 갖게 하며,
지역 변수(블록 내에 위치하는)를 선언할 때 사용하면 링크를 갖지 않는 Static Storage Duration(정적 기억 존속 시간)을 갖게 한다.
\(\texttt{extern}\) Specifier
- 다른 파일에서 정의된 External Variable(External Linkage Stroage Duration을 갖는 외부 변수)을 현재 파일에서 사용하고자 할 때 선언하는 키워드이다
\(\texttt{mutable}\) Specifier
- 구조체나 클래스가 \(\texttt{const}\)로 선언되었다 할지라도, 해당 객체의 특정 멤버를 변경가능하게 만드는 키워드이다.
* Mutable : a.변하기 쉬운, 변덕스러운
Ex. \(\texttt{mutable}\) 키워드 사용 예시
struct data {
char name[30];
mutable int accesses;
...
};
const data veep = {"Claybourne Clodde", 0, ...}; // const 객체임에 유의!
strcpy(veep.name, "Joye Joux"); // 허용되지 않는다! 객체 veep는 const를 통해 선언되었으므로 기본적으로 수정이 불가능한 객체이다.
veep.Accesses++; // 허용된다! accesses 멤버는 mutable을 통해 변경이 가능한 멤버이다.
\(\texttt{thread_local}\) Specifier
- 변수의 존속 시간을 쓰레드의 존속 시간과 일치시키고자 할 때 사용하는 키워드이다.