전문가를 위한 C++정리 73
-
1.2.1 포인터와 동적 메모리 동적 메모리는 컴파일 타임에 크기를 정할 수 없는 데이터를 이용할 수 있게 해준다. 거의 모든 프로그램은 동적 메모리를 어떤 형태로든 이용하게 된다. 스택과 힙 C++ 애플리케이션이 사용하는 메모리는 스택(stack)과 힙(heap) 두가지로 나누어진다. 스택 메모리는 쌓여있는 카드에 비유할 수 있다. 가장 위에 놓인 카드는 프로그램의 상태를 나타내는데, 보통 현재 실행중인 함수에 관한것 이다. 현재 실행 중인 함수의 로컬 변수는 모두 가장 위에 놓인 카드, 즉 제일 위 스택에 위치한다. 만약 현재 실행 중인 함수 foo()가 또 다른 함수 bar()를 호출한다면 새로운 스택 프레임 이 생성되고, bar() 함수를 호출할 때 넘겨진 파라미터가 foo()의 스택 프레임에서 ..
-
1.1.12 타입 추론 타입 추론(type Infernerce)는, 컴파일러가 표현식으로부터 타입을 자동적으로 연역해내도록 한다. 타입추론을 위해 두개의 키워드 auto와 decltype이 추가되었다. C++14부터는 decltype(auto)로 조합하여 사용할 수도 있다. auto 키워드 auto 키워드는 네 가지 전혀 다른 의미를 가지고 있다. 첫번쨰 사용 예는, 어떤 변수의 타입을 컴파일 타임에 자동적으로 연역해내는 것이다. auto x = 123; 위의 x는 자동적으로 int타입으로 변환된다. 그러나, int대신 auto를 타이핑 했을 뿐, 그다기 효용이 없다. 하지만, 복잡한 타입의 경우, 효과가 있다. 예를들어, 함수 getFoo() 의 리턴타입을 추론하기 힘들다고 가정하면, 리턴값을 변수에 ..
-
1.1.11 함수 프로그램의 크기가 커지면, main() 함수에 모든 코드를 담을 수 없다. 프로그램을 이해하기 쉽게 하려면, 코드의 일부를 의미있는 단위로 쪼개어, 즉 분해(decompose)하여 함수로 만들어야 한다. 다른 코드에서 함수를 이용할 수 있게 하려면, 함수를 선언해야 한다. 함수가 특정 소스 파일 안에서만 사용된다면, 보통 그 파일 안에서 선언과 정의를 모두 하게 된다. 반면 다른 모듈의 소스파일을 이용한다면, 함수 선언은 헤더파일에 위치시키고, 함수정의는 소스 파일에 두게된다. void myFunction(int i, char c); 리턴타입이 void 임으로 호출자에 아무런 결과를 돌려주지 않는다. 함수 파라미터로 int와 char이 선언되어있기 때문에, 파라미터를 무조건 입력해야 선..
-
-
배열은 같은 데이터 타입의 값들을 일렬로 나열한 것 이다. 각 항목은 배열의 위치로 구분된다. C++에서 배열을 선언할 때는 배열의 크기를 명시적으로 설정해야 한다. 배열의 크기로 값이 변할 수 있는 변수를 줄 수는 없다. 배열의 크기는 상수여야 한다. 또는 상수 표현식(constant expression)[constexpr]을 배열 크기 선언에 이용할 수 있다. int myArray[3]; myArray[0] = 0; myArray[1] = 0; myArray[2] = 0; 위와같이 3개의 정수값을 담는 배열을 선언하고, 배열의 항목을 모두 0으로 초기화한다. 이러한 초기화 방식은 다른 방법이 있는데, 반복문을 사용해서 초기화 할 수있고, 또는 초기화 매커니즘을 사용해서 초기화 할 수 있다. int m..
-