C++

기본제공 타입의 객체는 직접 초기화한다. 경우에 따라 저절로 되기도 하지만 그렇지 않을 수 있다. 생성자에서는 초기화 리스트를 사용하여 초기화하자. 나열 순서는 선언된 순서를 지키자. 비지역 정적 객체를 지역 정적 객체로 바꾸어 여러 번역 단위에 있는 비지역 정적 객체들의 초기화 순서 문제는 피해서 설계하자. 올바른 초기화 C++에서 객체의 값을 초기화하는 것은 상황에 따라 다르게 동작한다. 초기화되지 않은 값을 읽도록 내버려 두면 정의되지 않은 동작이 발생할 수 있다. 하지만, C++의 객체 초기화는 규칙이 명확히 있으니 올바르게 사용하자. C++의 C 부분만을 쓰고 있으며 초기화에 런타임 비용이 소모될 수 있는 상황이라면 값이 초기화된다는 보장이 없다. 그렇지만 C가 아닌 부분으로 확장한다면 상황에 ..
const를 붙여 선언하면 컴파일러가 사용상의 에러를 잡아내는 데 도움을 준다. const는 어떤 유효범위에 있는 객체에도 붙을 수 있으며, 함수 매개변수, 반환 타입에도 붙을 수 있고 멤버 함수에도 붙을 수 있다. 컴파일러 쪽에서 보면 비트수준 상수성을 지켜야 하지만, 프로그래머는 논리적인 상수성을 사용하여 프로그래밍해야 한다. 상수 멤버 및 비상수 멤버 함수가 기능적으로 서로 똑같게 구현되어 있을 경우 코드 중복을 피해야 한다. 이때 비상수 버전이 상수 버전을 호출하도록 만들어라 const const는 '의미적인 제약'을 소스 코드 수준에서 붙인다. 또한, 컴파일러가 이 제약을 단단히 지켜준다. const는 다양하게 활용할 수 있다. 클래스 바깥에서는 전역 혹은 네임스페이스 유효범위의 상수를 선언하는..
상수를 쓸 때는, #define보다는 const, enum을 우선으로 함수처럼 쓰이는 매크로는 #define 매크로보다 inline함수를 우선으로 #define 대신 const, enum, inline #define ASPECT_RATIO 1.653이라고 상수를 정의했다고 치자. 우리에게는 ASPECT_RATIO라는 기호식 이름(symbolic name)으로 보이지만 컴파일러는 전혀 알 수 없다. 소스 코드가 컴파일러에게 넘어가기 전에 전처리 단계에서 숫자 상수로 바꾸어버린다. 그 결과, ASPECT_RATIO는 기호 테이블에 들어가지 않고 1.653이라는 숫자로 들어가게 된다. 따라서, 우리는 에러를 보면 ASPECT_RATIO는 이름은 찾아볼 수 없다. 이러한 문제를 매크로대신 상수(const)를 사..
hvv_an
'C++' 카테고리의 글 목록 (6 Page)