잘 알려지지 않은 C++0x의 유용한 기능들 - 첫번째

최근 C++0x에서 concept 기능을 빼기로 최종 결정되면서 C++계가 나름 시끄러웠습니다. 그러면서 C++0x에 제가 알고 있던 큰 변화들 말고도 자잘하지만 유용한 변화가 꽤 많다는 것을 알게 되었습니다. 앞으로 두세 차례에 걸쳐 그런 기능들을 정리해보려 합니다.


enum class 열거형 클래스
기존 열거형의 다음과 같은 세가지 문제를 해결하고자 나온 놈입니다.
  • 기존 열거형은 암묵적으로 int로 변환이 되어, 그런 행동을 원치 않을 경우 문제가 된다.
  • 기존 열거형은 그를 포함하는 스코프로 각 토큰들을 노출시켜, 이름 충돌을 발생시킬 수 있다.
  • 열거형의 기반 타입을 지정할 수 없어, 혼란과 호환성 문제가 발생하고 전방 선언을 할 수 없다.



constant expressions 상수표현식
  • 더 일반적 상수표현식 제공
  • 사용자 정의 타입에 대한 상수표현 허용
  • 컴파일 시점에 초기화가 이루어지도록 보장하는 도구 제공


위에서 세번째 case문 같은 것이 가능해집니다.

 
당연히 컴파일 시점에 계산할 수 있는 것constexpr로 지정 가능합니다.

 
위와 같은 활용도 가능

defaulted and deleted functions 함수 자동생성 버전 사용 및 사용불가 지정
기존에는 복사를 방지하려고 복사 생성자와 대입 연산자를 private에 둔다던가 하는 방법을 썼었죠. 이제 다음과 같이 명시적 지정이 가능합니다.

또한 다음과 같이 컴파일러 자동 생성 버전을 사용함을 명시적으로 나타낼 수도 있습니다.

delegating constructors 생성자 위임

C++98에서는 여러 생성자가 같은 작업을 하도록 하려면 중복 코드를 짜거나 다음과 같이 "init()" 함수 같은 것을 만들어야 했습니다.

C++0x에서는 다음과 같이 한 생성자에서 다른 생성자에 작업을 위임할 수 있습니다.

이번 회는 여기까지입니다. C++ 사용하면서 불편하거나 번거로웠던 사항들을 많이 해결하고 있는 느낌입니다.

* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.  


크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 1 Comment 8

top