C++ 스토리지 클래스


스토리지 클래스는 C++ 프로그램에서 변수/함수의 범위(가시성)와 수명 주기를 정의합니다. 이러한 지정자는 수정하는 유형 앞에 배치됩니다. 아래에는 C++ 프로그램에서 사용할 수 있는 저장소 클래스가 나열되어 있습니다.

auto 저장소 클래스

auto 저장소 클래스는 모든 지역 변수에 대한 기본 저장소 클래스입니다.

{
   int mount;
   auto int month;
}

위의 예에서는 동일한 저장소 클래스를 가진 두 개의 변수를 정의합니다. Auto는 함수 내에서만 사용할 수 있습니다. 즉, auto는 로컬 변수만 수정할 수 있습니다.

register 스토리지 클래스

register 스토리지 클래스는 RAM 대신 레지스터에 저장되는 지역 변수를 정의하는 데 사용됩니다. 이는 변수의 최대 크기가 레지스터(보통 단어)의 크기와 동일하고 단항 '&' 연산자를 적용할 수 없음을 의미합니다(메모리 위치가 없기 때문입니다).

{
   register int  miles;
}

레지스터는 카운터와 같이 빠르게 액세스해야 하는 변수에만 사용됩니다. 또한 '레지스터'를 정의한다는 것은 변수가 레지스터에 저장된다는 의미가 아니라, 하드웨어 및 구현 제한에 따라 변수가 레지스터에 저장될 수 있다는 의미라는 점에 유의해야 합니다.

정적 저장소 클래스

static 저장소 클래스는 범위에 들어오고 나갈 때마다 지역 변수를 만들고 삭제할 필요 없이 프로그램 수명 동안 지역 변수를 유지하도록 컴파일러에 지시합니다. 따라서 static을 사용하여 지역 변수를 수정하면 함수 호출 간에 해당 값이 유지됩니다.

정적 수정자는 전역 변수에도 적용될 수 있습니다. 전역 변수를 수정하기 위해 static을 사용하는 경우 변수의 범위는 해당 변수가 선언된 파일로 제한됩니다.

C++에서 클래스 데이터 멤버에 static을 사용하면 클래스의 모든 개체에서 해당 멤버의 복사본 하나만 공유하게 됩니다.

#include <iostream>
 
// 函数声明 
void func(void);
 
static int count = 10; /* 全局变量 */
 
int main()
{
    while(count--)
    {
       func();
    }
    return 0;
}
// 函数定义
void func( void )
{
    static int i = 5; // 局部静态变量
    i++;
    std::cout << "变量 i 为 " << i ;
    std::cout << " , 变量 count 为 " << count << std::endl;
}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

变量 i 为 6 , 变量 count 为 9
变量 i 为 7 , 变量 count 为 8
变量 i 为 8 , 变量 count 为 7
变量 i 为 9 , 变量 count 为 6
变量 i 为 10 , 变量 count 为 5
变量 i 为 11 , 变量 count 为 4
变量 i 为 12 , 变量 count 为 3
变量 i 为 13 , 变量 count 为 2
变量 i 为 14 , 变量 count 为 1
变量 i 为 15 , 变量 count 为 0

extern 저장소 클래스

extern 저장소 클래스는 모든 프로그램에서 사용할 수 있는 전역 변수에 대한 참조를 제공하는 데 사용됩니다. 파일. 초기화할 수 없는 변수에 대해 'extern'을 사용하면 변수 이름은 이전에 정의된 저장 위치를 ​​가리킵니다.

여러 파일이 있고 다른 파일에서 사용할 수 있는 전역 변수나 함수를 정의하는 경우 다른 파일에서 extern을 사용하여 정의된 변수나 함수에 대한 참조를 얻을 수 있습니다. extern은 다른 파일에서 전역 변수나 함수를 선언하는 데 사용되는 것으로 이해할 수 있습니다.

extern 수정자는 일반적으로 아래와 같이 동일한 전역 변수나 함수를 공유하는 두 개 이상의 파일이 있을 때 사용됩니다.

첫 번째 파일: main.cpp

#include <iostream>
 
int count ;
extern void write_extern();
 
int main()
{
   count = 5;
   write_extern();
}

두 번째 파일: cpp

#include <iostream>
 
extern int count;
 
void write_extern(void)
{
   std::cout << "Count is " << count << std::endl;
}

여기서 두 번째 파일의 extern 키워드는 첫 번째 파일인 main.cpp에 정의된 개수를 선언하는 데 사용됩니다. 이제 이 두 파일을 다음과 같이 컴파일합니다.

$ g++ main.cpp support.cpp -o write

그러면 write 실행 프로그램이 생성되고 write를 실행하면 다음과 같은 결과가 생성됩니다.

$ ./write
Count is 5

mutable 저장소 클래스

mutable 지정자에만 적용됩니다. 이 튜토리얼의 마지막 부분에서 다룰 클래스의 객체에 대해 설명합니다. 객체의 멤버를 상수로 대체할 수 있습니다. 즉, 가변 멤버는 const 멤버 함수를 통해 수정될 수 있습니다.