type qualifiers storage classes c
C ++에서 유형 한정자 및 스토리지 클래스의 중요성.
이것에 독점 C ++ 교육 시리즈 , 변수 주제를 더 확장하고이 튜토리얼에서 C ++의 유형 한정자 및 스토리지 클래스를 살펴 보겠습니다. 이것은 작은 주제이지만 C ++ 프로그래밍에 관한 한 매우 중요하고 중요합니다.
C ++의 형식 한정자는 함께 사용되는 변수 또는 엔터티의 의미를 변경하지 않고 엔터티에 추가 정보 만 추가합니다.
학습 내용 :
C ++의 유형 한정자
C ++의 유형 한정자는 변수가 상수 또는 휘발성 인 것과 같은 추가 속성을 변수에 추가합니다.
유형 한정자는 변수의 의미 또는 해석을 동일하게 유지하여 변수에 액세스하거나 변수가 메모리에 저장되는 방식을 나타냅니다. 어떤 의미에서 유형 한정자는 변수에 더 많은 세분화를 추가합니다.
C ++에서 유형 한정자는 변수의 유형 지정자 (데이터 유형) 바로 앞에 지정됩니다.
C ++의 유형 한정자는 다음과 같이 분류됩니다.
# 1) const
유형 지정자 'const'는 const 유형의 객체를 정의하는 것입니다. const 개체 또는 변수는 선언 된 후에는 수정할 수 없습니다. const 개체 또는 변수를 수정하려고하면 컴파일러에서 오류가 발생합니다. 이전 튜토리얼에서 상수 / 리터럴에 대해 이미 살펴 보았습니다.
'const'키워드를 사용하는 상수 정의는 유형 한정자 'const'에 해당합니다.
# 2) 휘발성
유형 한정자 '휘발성'은 휘발성으로 표시된 변수의 값이 프로그램에서 지정하지 않은 다른 방식으로 변경 될 수 있음을 의미합니다. 변동성이있는 변수는 일반적으로 프로그램 때문이 아니라 일부 외부 요인으로 인해 변경됩니다. 즉, 그들은 본질적으로 휘발성입니다.
예를 들어, 실제 단어로 온도를 읽는 변수는 읽기 온도가 프로그램에 의해 완전히 제어되지 않을 수 있으므로 휘발성이 될 수 있습니다.
# 3) 가변
'변경 가능'유형 한정자는 멤버 또는 변수를 수정 가능하게 만듭니다.
가변 한정자는 일반적으로 non-const 및 non-reference 유형의 비 정적 클래스 멤버에 적용됩니다. 특정 상황에 따라 일부 변수는 변경 불가능한 상태로 유지하고 (변경할 수 없음) 일부 변수는 변경 가능해야 할 수 있습니다. 이러한 유형의 한정자는 변경 가능한 특성을 원할 때 많은 도움이됩니다.
Eclipse에서 Maven을 구성하는 방법
C ++의 스토리지 클래스
지금까지 모든 C ++ 변수에 대해 자세히 설명했습니다. 변수가 각각의 데이터 유형으로 선언 된 다음 프로그램에서 사용되는 것을 보았습니다. 변수를 완전히 정의하려면 데이터 유형과 별도로 스토리지 클래스도 필요합니다.
지금까지 변수에 대한 스토리지 클래스를 지정하지 않았지만 모든 변수에 적용되는 기본 스토리지 클래스 'auto'가 있습니다.
그렇다면 스토리지 클래스는 무엇입니까?
스토리지 클래스는 컴파일러에서 변수 또는 함수를 처리하는 방법과 변수에 대해 스토리지를 할당하는 방법을 지정합니다. 변수의 가시성 또는 범위 및 수명을 정의합니다. 변수의 수명은 변수가 활성 상태로 유지되는 기간입니다.
변수의 가시성 또는 범위는 변수에 액세스 할 수있는 함수 또는 모듈입니다. 이러한 스토리지 클래스는 변수의 데이터 유형 앞에 지정됩니다.
C ++에는 다음과 같은 스토리지 클래스가 있습니다.
# 1) 자동 저장 등급
이것이 기본 스토리지 클래스입니다. 스토리지 클래스 'Auto'는 로컬 변수에 적용되며 컴파일러에 의해 로컬 변수에 자동으로 할당됩니다. 'auto'키워드가 앞에 오는 지역 변수는 선언 된 함수에서 활성 상태로 유지되며 함수가 종료되면 범위를 벗어납니다.
'자동'스토리지 클래스가있는 변수가 초기화되지 않았거나 값이 할당되지 않은 경우 가비지 또는 정의되지 않은 값이 있습니다.
C ++ 프로그램에서 자동 변수의 예를 살펴 보겠습니다.
#include using namespace std; int main() { int i; float f; cout<<'Variable i = '< 값을 할당하지 않았기 때문에이 변수를 인쇄 할 때 둘 다 값이 0이라는 것을 알 수 있습니다. 이것은 프로그램에서 아직 값이 할당되지 않은 경우 자동 로컬 변수를 할당 할 값에 대해 전적으로 컴파일러에 따라 다릅니다. .
노트: C ++ 11부터 auto 키워드가 사용됩니다. 유형 추론 . 즉, auto i = 10과 같은 코드를 사용할 수 있으며 I의 데이터 유형은 i에 사용 된 이니셜 라이저에서 직접 유추됩니다. 따라서 'auto float f;'와 같은 것을 선언하면 컴파일러가 오류를 표시합니다.
따라서 기본값이 항상 자동 스토리지 클래스라는 것을 의미하므로 일반적으로 스토리지 클래스 auto에 대한 선언을 사용하지 않습니다.
# 2) 스토리지 클래스 등록
변수에 더 빠른 액세스가 필요하다는 요구 사항이있을 때 레지스터 스토리지 클래스를 사용합니다. 따라서 RAM (Random Access Memory)에 변수를 저장하는 대신 이러한 변수는 CPU 레지스터에 저장되고 레지스터와 동일한 크기를 갖습니다.
또한 이러한 변수에는 메모리 위치가 없으므로 이러한 변수에‘&’연산자를 사용할 수 없습니다.
레지스터 저장소 클래스가있는 변수가 있다고해서 변수가 항상 레지스터에 저장된다는 보장은 없습니다. 대신 변수가 레지스터에 저장 될 수 있고 하드웨어 및 구현에 완전히 의존한다고 가정합니다.
레지스터 변수는 자동 변수와 유사한 범위와 수명을 갖습니다.
예를 들어,
경험이 풍부한 데이터베이스 인터뷰 질문 및 답변
#include using namespace std; int main() { int i; register float f; cout<<'Variable i = '< # 3) 외부 스토리지 클래스 extern 스토리지 클래스는 변수를 여러 파일에서 공유해야 할 때 필요합니다. Extern 변수에는 전역 범위가 있으며 이러한 변수는 선언 된 파일 외부에서 볼 수 있습니다.
extern 변수는 다른 파일에서 선언되고 정의 된 변수이므로 초기화되지 않습니다.
Extern 변수는 전역 범위를 가지며 extern 변수의 수명은 종료 된 것으로 선언 된 프로그램만큼 길다.
Extern 변수는 다음과 같이 선언 할 수 있습니다.
extern int temp; int temp;
위의 예에서 이름이 같은 두 개의 변수 선언이 있지만 첫 번째는 다른 곳에 정의 된 extern 변수입니다. 이 extern 변수는 우리 프로그램에서 extern 변수 temp가 정의 된 소스 파일을 포함 할 때 유용합니다.
# 4) 정적 스토리지 클래스
정적 스토리지 클래스는 컴파일러에게 프로그램의 수명 내내 변수 값을 유지하도록 지시합니다. 정적 변수는 지역 변수와 유사하지만 앞에 'static'키워드가옵니다.
함수가 종료 된 후 범위를 벗어나는 지역 변수와 달리 정적 변수는 함수 또는 블록이 종료되고 해당 값이 함수 호출간에 보존 될 때 범위를 벗어나지 않습니다.
정적 변수는 초기화되며 프로그램 수명 동안 한 번만 저장됩니다. 선언 중에 아직 초기화되지 않은 경우 정적 변수는 0으로 초기화됩니다.
정적 스토리지 클래스를 더 잘 이해하기 위해 다음 예제를 보겠습니다.
#include using namespace std; void printvar() { static int var; var++; cout<<'static variable var = '< 산출:
printvar 호출 1 : 정적 변수 var = 1
printvar 호출 2 : 정적 변수 var = 2
printvar 호출 3 : 정적 변수 var = 3
printvar 호출 4 : 정적 변수 var = 4
위의 코드에는 int 유형의 정적 변수 var를 선언 한 'printvar'함수가 있습니다. 그런 다음이 변수를 증분하고 인쇄합니다. 주 함수에서 printvar 함수를 네 번 호출합니다.
이제 출력을 확인하십시오. 출력은 모든 함수 호출에서 정적 변수 var가 이전 값에서 1 씩 증가 함을 보여줍니다. 이것은 변수가 함수 호출 사이에 값을 유지하는 데 도움이되는 정적 스토리지 클래스입니다. 정적 변수는 모든 함수 호출에 대해 다시 초기화되지 않습니다.
또한 printvar 함수에서 정적 변수를 선언하고 초기화하지 않았 음을 주목해야합니다. 정적 변수를 초기화하지 않으면 초기 값 0으로 할당됩니다.
노트 : 정적 저장소 클래스는 전역 변수에도 적용 할 수 있습니다. 이 경우 변수는 전역 범위와 추가적으로 정적 저장소를 갖습니다.
# 5) 가변 스토리지 클래스
변경 가능한 스토리지 클래스는 클래스 객체에만 적용됩니다. 가변 스토리지 클래스를 적용하면 객체의 멤버가 'const'멤버 함수를 재정의 할 수 있습니다. 이것은 가변 멤버 나 객체가 'const'인 멤버 함수에 의해 수정 될 수 있음을 의미합니다.
C ++의 객체 지향 프로그래밍에 대해 배울 때 이후 튜토리얼에서 const 함수 및 객체와 변경 가능한 멤버에 대해 더 많이 배울 것입니다.
결론
이것은 C ++의 유형 지정자와 스토리지 클래스에 관한 것입니다. 이 튜토리얼을 통해 스토리지 클래스 및 유형 지정자에 대한 모든 개념을 명확히 할 수 있기를 바랍니다.
다음 튜토리얼에서는 C ++에서 사용되는 다양한 연산자와 사용법에 대해 자세히 알아 봅니다.
추천 도서