📚변수

변수는 값들을 저장하는 메모리 영역입니다. 모든 변수는 사용하기 전에 선언해야하고 선언한 이름으로 변수의 값을 읽거나 저장합니다.

1
2
3
4
5
6
// 변수 선언
TypeName varName;
TypeName varName1, varName2;

int num;                // int형 변수 선언
double width, height;   // double형 변수 선언


변수가 만들어질 때 지정된 값을 갖게 만들 수 있는데 이를 초기화라고 합니다. 첫 번째와 두 번째 초기화는 대입 하려는 값을 자료형의 값으로 묵시적 형 변환을 하여 초기화합니다.

하지만 중괄호를 사용한 초기화인 유니폼 초기화는 값을 축소 형 변환을 해야할 경우 오류로 취급합니다. 이는 자료형을 엄격하게 취급하는 C++의 특성이 반영된 것입니다.

1
2
3
4
5
6
7
8
9
10
// 변수 초기화
TypeName varName = value;
TypeName varName(value);
TypeName varName = {value}; // 유니폼 초기화(=은 생략 가능)

int a = 1;
int b(2);
int c{5};
int d = 1.2;    // d눈 1로 초기화
int e{1.4};     // 오류

📄자료형 추론

C++11의 자료형 추론을 활용하여 변수를 초기화하는 값의 자료형에 맞게 변수를 선언할 수 있습니다.

1
auto i{1};    // int i{1}; 과 동일


변수 i의 자료형을 지정하지 않았지만 초기화에 사용된 값 1이 정수형(int)이므로 변수 i의 자료형이 int형이라고 추론한 것입니다.



📄const 한정어

변수의 값이 항상 고정되게 하려면 변수를 선언할 때 const 키워드를 사용하면 됩니다.

1
const double PI {3.141592};

만약 const로 선언한 영역의 값을 수정하려고 한다면 컴파일러는 이것을 오류로 처리합니다. 따라서 PI의 값은 프로그램이 실행되는 동안 변경되지 않습니다. 이렇게 자료형에 특성을 부여하는 키워드를 자료형 한정어라고 합니다.

const 한정어 지정된 상수를 선언할 때 초기화를 통해 값을 가지도록 해야 합니다. const 상수는 선언 이후 그 값을 수정할 수 없기 때문입니다.



📄constexpr 한정어

constexpr은 const와 비슷하지만 값을 컴파일할 때 평가한다는 것에서 차이가 있습니다.



📄변수의 유효기간

변수의 유효기간은 변수가 언제 생성되고 소멸되는가를 의미합니다. 일반적으로 변수는 자동과 정적 유효기간을 가집니다.

자동 유효기간에 해당하는 변수는 함수 안에 선언된 지역변수입니다. 자동 변수는 함수가 시작될 때 만들어지고, 함수를 빠져나갈 때 없어집니다.

정적 유효기간에 해당하는 변수는 전역변수입니다. 정적 변수는 프로그램이 실행되는 동안 존재하는 변수라서 프로그램이 시작될 때 생성되고 프로그램이 종료될 때 소멸됩니다. 함수의 지역변수 중 static이 지정된 변수 또한 정적 유효기간을 갖습니다. 유효기간이 정적인 변수는 선언할 때 초기화하지 않으면 초기값은 0이 됩니다.

1
2
3
4
5
6
7
int a;            // 전역변수(정적 유효기간)

int func()
{
    int b;        // 지역변수(자동 유효기간)
    static int c; // 정적 지역변수(정적 유효기간)
}



Leave a comment