C++은 변수의 타입이 엄격한 언어이다. 모든 변수는 선언시 자료형이 결정되며 변수가 소멸할 때까지 자료형이 바뀌지 않는다. 이러한 성질을 type-safe하다고 표현하며, 프로그래머의 실수에 의한 변수의 오용을 상당히 막아줄 수 있다.C++ 언어 스펙상 내장되어 있는
변수가 대입되거나 다른 객체 생성을 위한 인자 등으로 사용되는 상황에서 데이터의 복사가 발생한다. 이때 실질적으로 복사되는 것이 메모리 주소인 경우 참조 전달이라고 하고, 그렇지 않은 경우 값 전달이라고 한다. 전통적으로 C언어에서는 포인터를 전달함으로써 참조 전달을
많은 현대 프로그래밍 언어에서는 변수의 타입에 따라 변수가 위치할 메모리 섹션이 결정된다. 예를 들어 배열이나 객체는 힙영역에 내장 타입의 변수는 스택 영역에 할당한다는 규칙이 있을 수 있다. 따라서 프로그래머에게 선택권이 없으므로 고민할 부분도 없어 메모리 구조를 전
C++의 raw 포인터는 강력한 수단이지만 프로그래머의 집중력이 조금만 흐트러져도 버그를 발생시키기 쉽다. 이를 보완하기 위해 C++11에서는 스마트 포인터를 제공한다.스마트 포인터는 raw 포인터가 할 수 있는 거의 모든 일을 할 수 있으며, 오류의 여지가 훨씬 적기
변수 또는 함수 등의 이름이 통용되는 범위를 스코프라고 한다. 스코프는 지역 변수의 소멸 시점과도 관계가 깊다. 기본적으로 스코프는 중괄호 블럭을 통해 그 경계가 만들어지고 이를 블럭 스코프라고 한다. 블럭 스코프는 중첩될 수 있으며 블럭 스코프를 갖는 변수는 중첩된
람다 표현식은 익명의 함수를 정의하는 표현식을 의미한다. 람다 표현식을 통해 클로져(Closure) 클래스가 정의되며 런타임에 인스턴스화된 클로져가 임시 객체로 반환된다. 일반적으로 람다 표현식, 클로져 클래스, 클로져를 엄밀히 구분하여 지칭하지 않고 람다로 통칭하는
템플릿은 C++의 일반화된 코드를 만드는 강력한 도구이다. 대상에 대한 타입만 다르고 로직이 다르지 않다면 템플릿을 이용해 단순한 반복 작업복사 & 붙여넣기(템플릿의 본질은 프로그래머가 수행해야 할 복사 & 붙여넣기 작업을 컴파일러가 타입 추론을 통해 컴파일 타임에 대
C++은 템플릿 기반의 컨테이너(자료구조)를 제공하고 컨테이너의 항목들에 범용적인 접근 방법을 제공하기 위해 반복자 패턴을 채용하고 있다. 각 컨테이너는 그 컨테이너만의 반복자를 지원하며, 반복자는 특정 컨테이너의 항목을 어떻게 순회할지 알고 있는 포인터 객체이다. 이
Chatper9. 입출력 스트림 C++은 C의 super set이기 때문에 C에서 사용하던 로우 레벨 입출력 함수들을 사용할 수 있다. 그러나 에러 처리가 완전하지 않고 커스텀 타입을 다룰 수 없다는 한계가 분명하다. C++는 스트림이라 불리는 유연하고 객체지향적인