Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 변수의 저장소 클래스는 무엇입니까?


스토리지 클래스는 C++ 프로그램 내에서 변수 및/또는 함수의 범위(가시성)와 수명을 정의합니다. 이러한 지정자는 수정하는 형식 앞에 옵니다. C++ 프로그램에서 사용할 수 있는 스토리지 클래스는 다음과 같습니다.

  • 자동
  • 등록
  • 정적
  • 외부
  • 변경 가능

C에서 자동 저장소 클래스 지정자를 사용하면 자동 저장소가 있는 변수를 명시적으로 선언할 수 있습니다. 자동 저장 클래스는 블록 내부에 선언된 변수의 기본값입니다. 자동으로 저장되는 변수 x는 x가 선언된 블록이 종료되면 삭제됩니다.

자동 저장 클래스 지정자는 블록에 선언된 변수의 이름이나 함수 매개변수의 이름에만 적용할 수 있습니다. 그러나 이러한 이름에는 기본적으로 자동 저장이 있습니다. 따라서 스토리지 클래스 지정자 auto는 일반적으로 데이터 선언에서 중복됩니다.

처음에는 구문 호환성만을 위해 C++로 이월되었지만 나중에는 자동 유형 추론이라는 자체 의미를 갖게 되었습니다.

C에서 레지스터 스토리지 클래스 지정자는 객체가 머신 레지스터에 저장되어야 함을 컴파일러에 나타냅니다. 레지스터 스토리지 클래스 지정자는 일반적으로 액세스 시간을 최소화하여 성능을 향상시키기 위해 루프 제어 변수와 같이 많이 사용되는 변수에 대해 지정됩니다. 그러나 컴파일러는 이 요청을 받아들일 필요가 없습니다. 대부분의 시스템에서 사용할 수 있는 레지스터의 크기와 수가 제한되어 있기 때문에 실제로 레지스터에 넣을 수 있는 변수는 거의 없습니다.

정적 저장소 클래스는 범위에 들어오고 나갈 때마다 지역 변수를 생성하고 소멸시키는 대신 프로그램의 수명 동안 존재하는 지역 변수를 컴파일러에 지시합니다. 따라서 지역 변수를 정적으로 만들면 함수 호출 간에 값을 유지할 수 있습니다.

extern 스토리지 클래스 지정자를 사용하면 여러 소스 파일에서 사용할 수 있는 개체를 선언할 수 있습니다. extern 선언은 설명된 변수를 현재 소스 파일의 다음 부분에서 사용할 수 있도록 합니다. 이 선언은 정의를 대체하지 않습니다. 선언은 외부에서 정의된 변수를 설명하는 데 사용됩니다.

변경 가능한 저장소 클래스 지정자는 멤버가 const로 선언된 개체의 일부인 경우에도 수정할 수 있도록 클래스 데이터 멤버에만 사용됩니다. static 또는 const 또는 참조 멤버로 선언된 이름과 함께 가변 지정자를 사용할 수 없습니다.

class A
{
   public:
   A() : x(4), y(5) { };
   mutable int x;
   int y;
};

int main()
{
   const A var2;
   var2.x = 345;
   // var2.y = 2345;
}

컴파일러는 var2가 const로 선언되었기 때문에 var2.y =2345 할당을 허용하지 않습니다. 컴파일러는 A::x가 변경 가능한 것으로 선언되었기 때문에 var2.x =345 할당을 허용합니다.