초기화하지 않은 포인터에는 무작위 값을 할당하기 때문에, 초기화하지 않은 포인터를 사용하면 오류가 발생할 수 있다. 따라서 포인터가 무언가를 가리키고 있지 않다는 것을 명시적으로 알려주려면 다음과 같이 설정해야 한다.위와 같은 방법은 c++ 11이상에서 좋은 방법이다.
예외 처리에는 크게 두 방법이 있다.Assertion은 c의 헤더인 에 정의되어 있다. 표현식을 계산한 뒤 결과가 false면 프로그램을 즉시 종료한다. 예를 들어 제곱근(Square Root)를 구하는 함수를 다음과 같이 구현해보자당연히, sqrt를 하기 위해서는 양
대규모 프로젝트에서는 이름 충돌이 자주 난다. 주로 namespace를 이용해 해결한다.주석은 명백하지 않은 부분을 이해하기 쉬운 말로 기술한다. 또한 난독화된 코드를 설명하는 Pseudo Code 역할을 한다.매크로는 제한하는 것이 좋다.매크로는 타입 개념 없이 무분
초기화 리스트를 사용하려면 <initializer_list> 헤더를 포함해야 한다. 복사하는 양이 많은 경우 얕은 복사(Shallow Copy)를 사용한다. 또한 일번작으로 깊은 복사(Deep Copy)도 제공하고 있다.이동 생성자는 원본에서 데이터를 훔쳐 빈 상
소멸자는 객체를 파괴할 때 마다 호출되는 함수다. 소멸자는 생성자와 달리 하나의 오버로드만 있고 인수를 허용하지 않는다.\`소멸자에서 예외를 절대 던지지 말기!클래스에 virtual 함수가 포함되어 있으면 소멸자도 virtual이어야 한다.리소스 획득은 초기화(RAII
객체의 멤버 변수에 접근하는 함수를 아래처럼 선언할 수 있다.위 경우 vector의 \[] operator 오버로딩을 이용해 data에 직관적으로 접근하게 해준다.2.6.2 예제에서 vector v가 const로 사용된다. 이 경우 아래와 같이 작성하는 것이 좋다.
C++에서는 대부분의 연산자를 오버로딩 할 수 있지만 일부 연산자는 특정 목적으로만 사용되어야 한다. 예를 들면 주소 연산자 &를 오버로딩하려면 마땅한 이유가 필요하다.연산자 오버로딩이 표준 타입의 행동에 가까울수록 다른 사람들이 더 신뢰할 수 있다.예를 들어, =,
함수 템플릿은 잠재적으로 무한한 수의 함수 오버로드를 생성하는 청사진이다.이 함수 템플릿은 오버로드를 치환하며, 함수 이름은 그대로 max다. 컴파일러는 제네릭이 아닌 함수의 경우 정의를 읽고 오류를 검사한 뒤 실행 가능한 코드를 생상한다. 제네릭 함수의 경우에는 구문
함수나 클래스를 구현할 때 붙인 고유한 이름도 나중에 더 많은 라이브러리를 포함하거나 포함한 라이브러리를 전개할 때 충돌할 수 있다.(생략)인수 종속 룩업은 함수 이름의 검색을 네임스페이스로 확장하지만 각 부모의 네임스페이스로는 확장하지 않는다.인수 종속 룩업은 nam
3.3 클래스 템플릿 3.3.1 컨테이너 예제 3.3.2 유니폼 클래스 및 함수 인터페이스 디자인 3.3.2.1 진정한 배열의 합
(생략)decltype은 표현식의 타입을 반환하는 함수와 같다.이 기능은 명시적 타입이 필요한 곳에서 매우 중요하다.decltype은 타입 수준에서만 동작하며, 실제로는 연산을 수행하지 않는다. 즉 위 예제에서 v1이나 v2가 빈 벡터라도 상관 없다.위 식에서 expr