삶의 공유

[C++] C++와 표준 라이브러리 초단기 속성코스(리터럴(literal) & 변수) 본문

Programing/C++

[C++] C++와 표준 라이브러리 초단기 속성코스(리터럴(literal) & 변수)

dkrehd 2021. 1. 28. 06:03
728x90
반응형

출저 : 책, 전문가를 위한 C++

리터럴(literal)은 표시한 숫자나 스트링과 같은 값을 의미한다. C++는 다양한 표준 라이브러리를 제공한다.

 

숫자(123)는 다음과 같은 리터럴로 표현 할 수 있다.

 

  • 십진수 리터럴 : 123
  • 8진수 리터럴 : 0173
  • 16진수 리터럴 : 0x7B
  • 이진수 리터럴 : 0b1111011
  • 부동 소수 값 (예, 3.14f)
  • 배정도 부동 소수점 값(예, 3.14)
  • 단일 문자(예 : 'a')
  • '0'으로 끝나는 문자 배열(예 : "character array")

숫자 리터럴에서는 자릿수 구분자를 사용 할 수 있다. 자릿수 구분자는 작은 따옴표로 표현한다.

 

  • 23'456'789
  • 0.123'456f

변수는 코드 안 어디에서나 선언할 수 있으며, 현재 블록 안에서 변수를 선언한 줄 다음 부터는 어디에서나 그 변수에 접근 할 수 있다.

 

변수를 선언 할때 반드시 값을 대입 할 필요는 없다. 하지만 초기화 하지 않은 변수는 메모리 값을 기반으로 무작위 값이 대입 될 수 있는데, 이로 인해 버그가 발생할 가능성이 높다. 

 

그래서 일반적으로는 선언과 동시에 초기값을 대입하는 데, 

int uninitializedInt;
int initializedInt = 7;

cout << uninitializedInt << "is a random value" << endl;
cout << initializedInt << "was assigned an initial value" << endl;

C++에서 자주 사용하는 타입을 정리하면 다음과 같다.

 

출저 : 전문가를 위한 C++

 

출저 : 전문가를 위한 C++

 

변수 타입을 실행 중에 바꿀수 있다. 이를 캐스팅(casting, 동적 형변환, 타입 캐스팅)이라 한다.

 

예를 들어 float 로 지정된 변수를 int로 캐스팅 할 수 있다.

C++에서 변수의 타입을 명시적으로 변환 하는 방법은 세가지 이다

 

float myFloat = 3.14f;
int i1 = (int)myFloat;              // 방법 1
int i2 = int(myFloat);              // 방법 2
int i3 = static_cast<int>(myFloat); // 방법 3

이렇게 캐스팅 하면 부동 소수점 아랫 부분을 잘라낸 나머지 정수 부분만 남게 된다.

방법1이 많이 사용되고 있으며, 방법 2는 거의 사용 되지 않고, 방법 3은 좀 길지만 가장 명확해서 이렇게 표현하는 것이 바람직하다.

 

문맥에 따라 변수 타입이 강제로 캐스팅(강제 형변환)될 때도 있다. 예를 들어 long 타입 변수에 short타입 변수값을 대입하면 short타입이 long 타입으로 자동 변환된다. long 타입의 정밀도가 short타입 보다 넓기 때문이다.

short someShort;
long someLong = someShort; // 명시적으로 캐스팅 할 필요가 없다.

변수가 자동으로 캐스팅할 때 데이터가 손실 될 수 있다는 점에 주의한다.

예를 들어 float를 int로 변환하면 소수점 아래 숫자가 사라진다. 대다수의 컴파일러는 int변수에 float값을 대입할 때 명시적으로 캐스팅 하지않으면 경고 또는 에러메세지를 발생시킨다.

왼쪽에 나온 타입이 오른쪽에 나온 타입과 완전히 호환된다고 확신할때만 자동 캐스팅을 사용한다. 

반응형