프로그래밍 이야기/C++ 2

[C++] 우리 요딴 문제는 내지 않기로 해요

C/C++은 현대에 와서 '어려운 프로그래밍 언어' 중 하나로 손꼽히는 처지가 되었습니다. 여러가지 이유가 있겠지만, 저는 감히 그 이유를 '함정에 빠지기 쉽다'고 하겠습니다. 개중에 하나는, '정의되지 않은 동작(undefined behavior, 이하 UB)'입니다. C/C++에만 존재하는 이 요상한 개념은 말 그대로 표준에서 어떻게 동작할지 정의하지 않은 동작들인데요. 그냥 컴파일러가 무슨 짓을 할 지 모르는 겁니다. 왜냐하면 정의된 게 없으니까. 무얼 하든 컴파일러 마음입니다. 비슷한 개념으로는 unspecified behavior(이하 UsB)가 있습니다. 마땅히 통용되는 번역은 없는 것으로 알고 있기에 그냥 UsB라고 하겠습니다. 이건 표준에서 어떤 동작으로 이어질 지 후보만 추려놓은 개념입니..

[C++] 연산자 오버로딩 시 상수/비상수 버전 간 코드 중복 줄이기

이펙티브 C++을 읽는 중에 처음보는 hack이 있어서 기록해두고자 한다. 연산자 오버로딩을 할 때 상수(const) 버전/비상수 버전을 나눠서 오버로딩할 수 있는데, 반환 타입에 const가 있냐없냐 차이일 뿐 하는 역할은 같으니 다음과 같은 방법을 통해 코드 중복을 줄일 수 있다.class TextBlock{public: const char &operator[](std::size_t position) const { ... return text[position]; } char &operator[](std::size_t position) { return const_cast( static_cast(*this)[positio..