- 잘 알려지지 않은 C++0x의 유용한 기능들 - 마지막
Tweet
- Game Development
- 2009/08/07 23:52
- Bjarne Stroustrup, C++, C++0x, constexpr, CPP, literal, nullptr, raw string, template alias, typedef, Using, 리터럴, 초기화목록, 템플릿별칭
-
잘 알려지지 않은 C++0x의 유용한 기능들 - 첫번째
잘 알려지지 않은 C++0x의 유용한 기능들 - 두번째
널포인터nullptr
정수 0 이 아닌 널 포인터 지칭 전용의 리터럴 nullptr가 생겼습니다.
날 문자열 리터럴raw string literals
문자열에서 특수문자를 나타내기 위해 백슬래쉬로 이스케잎 처리 해주는 것은, 정규표현식 등에서 매우 번거로운 작업이 됩니다. (정규표현식의 경우 캐릭터 클래스라는 것에서 별도 용도로 백슬래쉬를 쓰기 때문이죠.) 가령, 정규표현식에서 백슬래쉬로 분리되어 있는 두 단어를 나타내는 \w\\w를 문자열로 표현하려면 다음과 같이 해야 합니다.
날 문자열 리터럴을 사용하면 다음과 같이 표현 가능합니다.
이 때, 그럼 문자열 내에 ]" 표현이 있는 경우 어떻게 하는가 하는 의문이 들 수 있습니다. 이런 경우도 해결할 수 있도록, [ 앞과 ] 뒤에 쓰이는 구분자를 일치만 시켜주면 쌍따옴표와 대괄호 사이에 얼마든지 추가 구분자를 포함시킬 수 있도록 하였습니다. 다음과 같이 말이죠.
템플릿 별칭template alias
다음과 같이 일부 템플릿 인자만을 원하는 타입으로 지정하여 일반 템플릿처럼 작동하는 식별자를 만들 수 있습니다.
이 때 using 구문이 쓰이며, 이는 다음처럼 기존 typedef의 대용으로 쓰일 수도 있습니다.
초기화 구문 단일화uniform initialization syntax and semantics
C++은 타입과 초기화 문맥에 근거해 개체를 초기화할 수 있는 여러가지 방법을 제공해 왔습니다.
그리고 다음과 같은 혼란도 있었죠.
이러한 혼란을 없애고자 {}-초기화 목록을 일관되게 사용할 수 있도록 했습니다.
사용자정의 리터럴user-defined literals
C++은 여러 내장 타입들에 대한 리터럴을 제공합니다.
그러나 C++98에서는 사용자정의 타입에 대한 리터럴을 정의할 수 없었죠. 가령, 다음과 같은 것들 말입니다.
C++0x에서는 다음 문법으로 사용자정의 리터럴을 지원합니다.
컴파일시점 계산을 위해 constexpr을 사용함에 주목하세요. 이를 다음과 같이 활용할 수 있습니다.
이러한 사용자정의 리터럴을 위한 접미사는 보통 한두글자로 매우 짧을텐데요, 이럴 경우 쉽게 충돌이 발생할 수 있습니다. 그를 방지하려면 다음처럼 namespace를 사용하시면 됩니다.
이상으로 C++0x의 잘 알려지지 않은 기능들에 대한 연재를 마칩니다. 이상을 포함한 더 자세한 정보는 Bjarne Stroustrup 선생이 운영하는 다음 웹페이지에서 확인하실 수 있습니다.
* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.
잘 알려지지 않은 C++0x의 유용한 기능들 - 두번째
널포인터nullptr
정수 0 이 아닌 널 포인터 지칭 전용의 리터럴 nullptr가 생겼습니다.
날 문자열 리터럴raw string literals
문자열에서 특수문자를 나타내기 위해 백슬래쉬로 이스케잎 처리 해주는 것은, 정규표현식 등에서 매우 번거로운 작업이 됩니다. (정규표현식의 경우 캐릭터 클래스라는 것에서 별도 용도로 백슬래쉬를 쓰기 때문이죠.) 가령, 정규표현식에서 백슬래쉬로 분리되어 있는 두 단어를 나타내는 \w\\w를 문자열로 표현하려면 다음과 같이 해야 합니다.
날 문자열 리터럴을 사용하면 다음과 같이 표현 가능합니다.
이 때, 그럼 문자열 내에 ]" 표현이 있는 경우 어떻게 하는가 하는 의문이 들 수 있습니다. 이런 경우도 해결할 수 있도록, [ 앞과 ] 뒤에 쓰이는 구분자를 일치만 시켜주면 쌍따옴표와 대괄호 사이에 얼마든지 추가 구분자를 포함시킬 수 있도록 하였습니다. 다음과 같이 말이죠.
템플릿 별칭template alias
다음과 같이 일부 템플릿 인자만을 원하는 타입으로 지정하여 일반 템플릿처럼 작동하는 식별자를 만들 수 있습니다.
이 때 using 구문이 쓰이며, 이는 다음처럼 기존 typedef의 대용으로 쓰일 수도 있습니다.
초기화 구문 단일화uniform initialization syntax and semantics
C++은 타입과 초기화 문맥에 근거해 개체를 초기화할 수 있는 여러가지 방법을 제공해 왔습니다.
그리고 다음과 같은 혼란도 있었죠.
이러한 혼란을 없애고자 {}-초기화 목록을 일관되게 사용할 수 있도록 했습니다.
사용자정의 리터럴user-defined literals
C++은 여러 내장 타입들에 대한 리터럴을 제공합니다.
그러나 C++98에서는 사용자정의 타입에 대한 리터럴을 정의할 수 없었죠. 가령, 다음과 같은 것들 말입니다.
C++0x에서는 다음 문법으로 사용자정의 리터럴을 지원합니다.
컴파일시점 계산을 위해 constexpr을 사용함에 주목하세요. 이를 다음과 같이 활용할 수 있습니다.
이러한 사용자정의 리터럴을 위한 접미사는 보통 한두글자로 매우 짧을텐데요, 이럴 경우 쉽게 충돌이 발생할 수 있습니다. 그를 방지하려면 다음처럼 namespace를 사용하시면 됩니다.
이상으로 C++0x의 잘 알려지지 않은 기능들에 대한 연재를 마칩니다. 이상을 포함한 더 자세한 정보는 Bjarne Stroustrup 선생이 운영하는 다음 웹페이지에서 확인하실 수 있습니다.
* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.
'Game Development' 카테고리의 다른 글
| GDC Europe 2009 참관기 (2) | 2009/08/25 |
|---|---|
| GDC 유럽 2009 참관 세션 스케줄 (5) | 2009/08/14 |
| 잘 알려지지 않은 C++0x의 유용한 기능들 - 마지막 (2) | 2009/08/07 |
| 크라이텍 한국 지사에서 일할 프로그래머분들 모십니다 (14) | 2009/08/01 |
| 잘 알려지지 않은 C++0x의 유용한 기능들 - 두번째 (2) | 2009/07/29 |
| 잘 알려지지 않은 C++0x의 유용한 기능들 - 첫번째 (8) | 2009/07/23 |











Recent comment