반응형
우선 이 글은
MS Visual Studio Team System 2010 공식 팀 블로그
에 있는 내용을 한 페이지에 볼 수 있게 요약한 것입니다. 자의적으로 요약한 만큼 잘못된 설명이 존재할 수 있으며 좀 더 궁금한 부분은 해당 페이지를 참조하여 주시면 됩니다.
auto
컴파일 시간에 컴파일러가 자동으로 타입을 유추하여 코드를 생성시켜 주는 새로운 키워드 입니다.
예제 보니 가장 많이 쓰일 곳이 STL 코드내일 듯 보입니다.
for( auto IterPos = ItemCodeList.begin(); IterPos != ItemCodeList.end(); ++IterPos)
{
cout << "ItemCode : " << *IterPos << endl;
}
cout << endl;
static_assert
컴파일 시간용 assert으로 지금은 template을 이용하여 사용하는 것을 정식으로 지원 합니다. 컴파일 시간용 assert은 template과 같이 사용할 때 여러모로 유용하며 생산성을 높여줍니다.
template
class MYSTACK
{
static_assert( StackSize <= 10, "Stack Size Error" );
public :
MYSTACK() : data( new T[StackSize] )
{
}
...
우측값 참조, 이동 연산자(&&)
복사 생성자가 자신의 메모리로 데이터를 카피하는 것이 주 목적이라면 이동 연산자는 자신의 메모리로 데이터를 이동하는 것을 주 목적으로 하는 연산자입니다. 아래 예제에서는 이동 연산자와 같은 경우는 Name의 메모리를 이동하고 원래 메모리를 지칭하는 포인터를 0으로 만들었습니다. 이동 연산자는 STL컬렉션을 다룰 때 성능을 높여줄 듯 합니다.
class QuestInfo
{
public:
// 복사 생성자
QuestInfo(const QuestInfo& quest)
: Name(new char[quest.NameLen]), NameLen(quest.NameLen)
{
memcpy(Name, quest.Name, quest.NameLen);
}
// 대입 연산자
QuestInfo& operator=(const QuestInfo& quest)
{
if (this != &quest) {
if (NameLen < quest.NameLen)
{
// 버퍼를 확보한다
}
NameLen = quest.NameLen;
memcpy(Name, quest.Name, NameLen);
}
return *this;
}
// Move 생성자
QuestInfo(QuestInfo&& quest)
: Name(quest.Name), NameLen(quest.NameLen)
{
quest.Name = NULL;
quest.NameLen = 0;
}
// Move 연산자
QuestInfo& operator=(QuestInfo&& quest)
{
if( this != &quest ) {
delete Name;
Name = quest.Name;
NameLen = quest.NameLen;
quest.Name = NULL;
quest.NameLen = 0;
}
return *this;
}
private:
char* Name;
int NameLen;
};
우측값 참조, 이동 연산자
Lamda는 무명함수를 지칭하는 용어로 쉽게 이야기 하면 선언이나 정의가 코드 내에서 쉽게 이루어지는 함수라고 할 수 있을 듯 합니다. stl을 좀 더 편하게 사용하기 위하여 쓰면 될 듯 합니다.
int main()
{
vector< User > Users;
vector< User >::iterator Iter;
Iter = find_if( Users.begin(),
Users.end(),
[](User& tUser) -> bool { return true == tUser.IsDie(); } //Lamda
);
cout << "found Die User Index : " << Iter->GetIndex() << endl;
return 0;
}
decltype
컴파일 시간에 컴파일러가 변수의 타입을 바탕으로 해당 타입을 유추하여 줍니다.
int Hp;
decltype(Hp) NPCHp = 5;
decltype(Hp + NPCHp) TotalHp;
decltype(Hp*) pHp = &Hp;
반응형
'C++ 프로그래밍' 카테고리의 다른 글
C++ Technical Report 1 : Metaprogramming and Type Traits (0) | 2009.07.29 |
---|---|
C++ Technical Report 1 : Function pobjects (0) | 2009.07.28 |
C++ Technical Report 1 : Containers (0) | 2009.07.27 |
C++ Technical Report 1 : General Utilities (0) | 2009.07.24 |
C++ Technical Report 1 (TR1) : Overview (0) | 2009.07.23 |
C++ 헤더파일에 선언할 수 있는 4가지 타입의 전역변수 (0) | 2009.04.21 |
[STL] erase Story... beta (1) | 2009.04.21 |
C++ 흔한 실수 (0) | 2009.03.23 |