대답해야 할 질문들
- ASCII, Unicode, UTF가 어떤 개념인지, 어떤 차이가 있는지 설명하세요.
Simple Variables
int braincount;
braincount = 5;
- 이 두 줄의 코드는 구체적으로 다음과 같이 작동한다.
- int형 데이터를 담을 수 있을 만큼의 데이터를 할당한다.
- 할당된 데이터 위치를 기록한다.
- 5라는 값을 해당 위치에 복사한다.
Integer Types
- 일부 언어는 정수형 데이터로 int 하나만을 지원하지만 C++은 여러 개로 구분한다.
- 그 구분에 따라 메모리 사이즈가 다르다. 즉, 담을 수 있는 값의 범위가 다르다.
- short, int, long, long long으로 구분한다. 차이는 다음과 같다.
- 2bytes <= short <= int <= 4bytes <= long <= 8bytes <= long long
- 시스템마다 short와 int 등 크기가 다른데, 보통 short는 2바이트, long이 4바이트다.
The sizeof Operator and the climits Header File
- sizeof 연산자를 타입(type name)이나 변수에 대입할 수 있다.
- sizeof는 연산자이기 때문에 2가지 방식으로 쓸 수 있다.
sizeof(int)
sizeof int
Initialization with C++11
- C++11은 다양한 초기화를 지원한다.
int num = 24; // C
int num = {24}; // C++98
int num{24}; // C++11
int num{}; // C++11, num == 0
int num = {}; // C++11, num == 0
cout << "Year = " << 1492 << "\n";
- 위 코드에서 cout은 1492를 어떤 타입으로 저장할까?
- 정수 타입에 있어서 C++의 규칙은 단순하다. 특별한 이유가 없으면 무조건 int다. 특별한 이유는 다음과 같다.
- suffix를 통해 정확히 타입을 지정한 경우
(예. typeof(22022L) == long, typeof(22022ULL) == unsigned long long) - 해당 숫자가 int의 범위를 넘어갔을 경우
- suffix를 통해 정확히 타입을 지정한 경우
Char type : char, wchar_t, char16_t, char32_t
- char 타입도 결국은 숫자를 나타내는 자료형 중 하나다.
- 기본적으로 모든 문자는 ASCII 문자표에 의해 7비트를 이용해 나타냈다.
- 하지만 다른 언어의 문자도 나타내기 위해 Unicode를 만들었다.
- UTF-8은 Unicode를 저장하는 인코딩 방식 중 하나다.
- wchar_t는 2바이트 크기로 유니코드의 등장으로 만들어졌다.
- char16_t와 char32_t 또한 유니코드의 크기가 최대 4바이트 되면서 만들어진 자료형이다.
The const Qualifier
- const 한정자(qualifier)를 사용해 해당 값을 상수(constant)로 만들 수 있다.
const int Months = 12; - 이는 C의 define 지시어와 비슷하다고 느낄텐데, C++ 스타일인 const가 더 낫다. 그 이유는 3가지다.
- 자료형을 명백하게(explicit) 나타낼 수 있다.
- C++의 Scoping Rule을 적용할 수 있다. (Chapter 9에서 자세히 다룸)
- 배열이나 스트럭쳐와 같이 더 다양한 자료형을 상수화(constanct)할 수 있다.
- ANSI C 또한 const 한정자를 가지고 있는데, 이는 C++의 것을 가져온 것이다.
Floating-Point Numbers
- 2가지 방법으로 실수를 정의할 수 있다.
- 소수점을 붙여서 정의
float a = 1.0; - E를 표기
3.45E6
- 소수점을 붙여서 정의
- E 표기법은 단순하다. 예시에서 3.45를 mantissa라고 부르고, 6을 exponent라고 말한다. 실제 값은 3.45 * 10^6을 하면 된다. 부호를 추가해서 더 길게 나타내면 다음과 같다.
+3.45E+6 - 실수 타입도 정수처럼 여러가지로 나타낼 수 있다. 종류와 크기는 다음과 같다.
- 4byte <= float <= 6byte <= double <= long double
- 보통 float == 4byte, double = 8byte, long double = 10~16byte다.
Type Cast
- type cast는 기본적으로 2가지 문법이다.
(long)thorn; // C style
long(thorn); // pure C++ style
- 하지만 이런 캐스팅 방식이 위험하다고 느낀 C++ 제작자는 캐스팅의 범위를 제한하는 연산자를 추가했다. 그게 static_cast<type_name>(); 이다. 관련 내용은 15챕터에서 다룬다.
auto Declarations in C++11
- C++11은 컴파일러가 type을 추측하는 기능을 추가했다. auto가 그중 하나다.
- auto를 쓰는 이유는 STL로 인해 타입의 이름이 길어지는 것을 방지하기 위해서다. 다음 예시를 보자.
// Before C++11
std::vector<double> scores;
std::vector<double>::iterator pv = scores.begin();
// After C++11
std::vector<double> scores;
auto pv = scores.begin();
'Coding > Unreal, C++' 카테고리의 다른 글
[C++ Primer Plus] 4. Compound Types (0) | 2022.05.29 |
---|---|
[번역] HTTP 서버: 밑바닥부터 만들어보기 (0) | 2022.05.29 |
[C++ Primer Plus] 2. Setting Out to C++ (0) | 2022.05.26 |
[C++ Primer Plus] 1. Getting Started with C++ (0) | 2022.05.24 |
Replication (0) | 2022.05.23 |