차세대 C++ 표준인 C++ 0x 의 언어적인 추가 사항 정리
(C++ 1x 가 되지 않기를 빈다... ^^;)
- UTF-8, UTF-16 지원
= u"This is a UTF-16 string."
= U"This is a UTF-32 string."
- Template Aliases
template<typename T>
class MyAllocator {
};
template<typename T>
using MyVector = std::vector<T, MyAllocator<T>>;
MyVector<int> vec;
- Allow sizeof to apply to non-static data members
Currently the C++ Standard does not allow the following:
int m;
};
sizeof(S::m)
- Generalized Constant Expressions - constexpr
아래의 코드처럼 작동하기 위해 추가된것 같다
이미 C 99 표준에서는 배열크기에 대해서 상수가 아닌 지역변수도 허용되는데 그것과는 또 다른 지원방식
{
return 5;
}
double array[Number()];
constexpr int square(int x)
{
return x * x;
}
float array[square(9)];
- 중첩된 template 선언에서 >> 연산자의 문법오류
// 현재의 경우 아래의 문법이 에러가 난다
// 이유는 마지막에 >> 부분이 중첩 tempate 문법의 닫는 의미가 아닌 시프트 연산자로 인식
// C++ 0x 버전에서는 문제없이 컴파일 될수 있도록 조치
typedef std::vector<std::vector<bool>> Flags;
// 그래서 아래와 같이 해야 했다
typedef std::vector<std::vector<bool> > Flags;
- auto 키워드 추가
컴파일 타임에 자동으로 타입을 유추하여 타입을 확정해주는 auto 라는 키워드 추가
for (auto itr = myvec.begin(); itr != myvec.end(); ++itr) {} // auto 사용
- stl 컨테이너에 배열 초기화 허용
내 생각에는 {1, 2 } 의 형식을 바로 타입(ex: int p[])으로 인식할수 있게끔 된것이 아닌가 생각이 드는데 확인을 해봐야 할것같다
- for each 형식의 문법 지원
네이티브 타입만 지원하는지 컨테이너도 지원 하는지 확인 해봐야 할듯
for(int &x : my_array) // 참조 주목
{
x *= 2;
}
- Lambda, Closure 형식 문법 지원
boost::lambda 은 정말 놀랍다.
그런데 이런걸 언어차원에서 지원하다니..
for(vector<Widget>::iterator i = w.begin(); i != w.end(); ++i) {
cout << *i << " ";
}
// boost::lambda
for_each( w.begin(), w.end(), cout << _1 << " " );
// C++0x lambda
for_each( w.begin(), w.end(), []( const Widget& w ) { cout << w << " "; } );
참고 사이트 :
http://blogs.msdn.com/vcblog/archive/2007/06/04/update-on-the-c-0x-language-standard.aspx
http://www.jong10.com/246
'Dev > C++' 카테고리의 다른 글
asio C++ library (0) | 2008.08.22 |
---|---|
C++ 0x - Herb Sutter의 블로그 글 (0) | 2008.07.29 |
memory pooling - code (0) | 2008.05.01 |
Is Derived - code (0) | 2008.05.01 |
C++에서 프로퍼티 구현하기 (0) | 2008.05.01 |