2025/06 34

Effective Modern C++ #7 객체 생성 시 괄호()와 중괄호{}를 구분하라.

현대적 C++에 적응하기현대적 C++ 에서는 auto, smart pointer, move semantics, lambda, thread 등 뛰어난 기능을 제공한다. 해당 챕터에서 아래 질문에 대한 답변을 얻을 수 있다.객체를 생성할 때, 괄호보다 중괄호 사용해야하는 경우는 언제인가?별칭 선언이 typedef 보다 나은 이유는 무엇인가?constexpr은 const 와 어떻게 다른가?const 멤버 함수와 쓰레드 안전성 관계는 무엇인가?7. 객체 생성 시 괄호()와 중괄호{}를 구분하라.C++11 부터 다양한 초기값 지정 방법이 존재한다.int x(0); // 괄호int y = 0; // 등호int z{0}; // 중괄호크게 위와 같이 괄호, 등호, 중괄호를 사용하는 방법으로 나눌 수 있다. (int ..

dev/C++ 2025.06.10

Effective Modern C++ #13 iterator 보다 const_iterator 를 선호하라

13. iterator 보다 const_iterator 를 선호하라const_iterator 는 const 를 가리키는 포인터의 stl 버전이다.반복자가 가리키는 항목을 수정할 필요가 없을 때, 웬만하면 반복자에서 const_iterator 를 사용하는 것이 바람직하다.웬만하면 const 를 사용하라는 관행과 동일한 맥락이다. C++98 에서도 const_iterator 는 존재했으나, 사용하기 번거로웠다.정적 캐스팅을 사용해야하는데, const 아닌 컨테이너에서 const_iterator 를 얻는 간단한 방법이 없어서이다. C++98 const_iterator 사용 예시)#include #include typedef std::vector::const_iterator ConstIter;int main()..

dev/C++ 2025.06.10

Effective Modern C++ #5 명시적 형식 선언보다는 auto 를 선호하라.

autoauto가 의도하지 않은 형식으로 추론할 때가 가끔 존재한다.5. 명시적 형식 선언보다는 auto 를 선호하라.auto 변수의 형식은 초기값으로부터 추론 되므로, 반드시 초기값을 제공해야한다.따라서 변수 선언 시 초기화를 빼먹는 실수는 애초에 안하게 된다.error: declaration of variable 'a' with deduced type 'auto' requires an initializer초기화 없이 auto 변수 선언 시, 위와 같은 컴파일 에러 발생한다. auto의 다른 장점으로는, std::function과 비교함으로써 드러난다.std::function 는 함수 포인터를 일반화한 wrapper이다.std::function 방식으로 객체 생성 시, 지칭할 함수 형식 (반환값, 매개..

dev/C++ 2025.06.08

Effective Modern C++ #1 템플릿 형식 연역 규칙을 숙지해라.

형식연역 (Deducing Types)형식 연역 (template)은 타입에 대한 수정이 소스코드의 전반적 수정으로 전파되는 것을 막아준다.하지만 동시에, 개발자가 의도한 타입인지 예측하는 것은 어려워졌다.1. 템플릿 형식 연역 규칙을 숙지해라.auto 가 연역하는 방식과, C++98 에도 존재했던 템플릿이 연역하는 방식은 일치한다.따라서 template 연역 규칙을 숙지한다면, auto 연역 규칙에도 동일하게 적용할 수 있다.template void fn(ParamType a)fn(expr);위 예시에서`ParamType` 과 `T` 는 다를 수도 있다.const, &, && 등 수식어가 ParamType 에 붙을 수 있기 때문이다. 템플릿 형식 연역 규칙은, ParamType 종류에 따라 3가지 케이..

dev/C++ 2025.06.04