본문 바로가기

Dev/C++

C++ 0x

차세대 C++ 표준인 C++ 0x 의 언어적인 추가 사항 정리
(C++ 1x 가 되지 않기를 빈다... ^^;)


- UTF-8, UTF-16 지원

= u8"I'm a UTF-8 string."
= u"This is a UTF-16 string."
= U"This is a UTF-32 string."


- Template Aliases

#include <vector>

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:

struct S {
   int m;
};

sizeof(S::m)


- Generalized Constant Expressions - constexpr

아래의 코드처럼 작동하기 위해 추가된것 같다
이미 C 99 표준에서는 배열크기에 대해서 상수가 아닌 지역변수도 허용되는데 그것과는 또 다른 지원방식


constexpr int Number ()
{
    return 5;
}

double array[Number()];


constexpr int square(int x)
{
    return x * x;
}

float array[square(9)];  



- 중첩된 template 선언에서 >> 연산자의 문법오류

#include <vector>

// 현재의 경우 아래의 문법이 에러가 난다
// 이유는 마지막에 >> 부분이 중첩 tempate 문법의 닫는 의미가 아닌 시프트 연산자로 인식
// C++ 0x 버전에서는 문제없이 컴파일 될수 있도록 조치
typedef std::vector<std::vector<bool>> Flags;

// 그래서 아래와 같이 해야 했다
typedef std::vector<std::vector<bool> > Flags;


- auto 키워드 추가

컴파일 타임에 자동으로 타입을 유추하여 타입을 확정해주는 auto 라는 키워드 추가

for (vector<int>::const_iterator itr = myvec.begin(); itr != myvec.end(); ++itr) {} // 타입명시

for (auto itr = myvec.begin(); itr != myvec.end(); ++itr) {} // auto 사용


- stl 컨테이너에 배열 초기화 허용

내 생각에는 {1, 2 } 의 형식을 바로 타입(ex: int p[])으로 인식할수 있게끔 된것이 아닌가 생각이 드는데 확인을 해봐야 할것같다

std::vector<double> v = { 2.3, 1.2, 6.7, 4.5  };


- for each 형식의 문법 지원

네이티브 타입만 지원하는지 컨테이너도 지원 하는지 확인 해봐야 할듯

int my_array[5] = {1, 2, 3, 4, 5};
for(int &x : my_array)     // 참조 주목
{
    x *= 2;
}


- Lambda, Closure 형식 문법 지원

boost::lambda 은 정말 놀랍다.
그런데 이런걸 언어차원에서 지원하다니..

// 기존 for 문
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
C++ 0x  (0) 2008.05.09
memory pooling - code  (0) 2008.05.01
Is Derived - code  (0) 2008.05.01
C++에서 프로퍼티 구현하기  (0) 2008.05.01

태그