Search

'VC'에 해당되는 글 2건

  1. 2012.08.21 [ VC11-C++11 ] range base for - 1 (3)
  2. 2012.07.23 [ VC11-C++11 ] enum - 전방선언

[ VC11-C++11 ] range base for - 1

C++0x 2012.08.21 19:20 Posted by 흥배

VC10에서 선보였던 C++11의 기능 중 강력하면서 사용하기 쉽고, 자주 사용한 기능이 아마 'auto'이지 않을까 생각합니다. 예전에 강연을 할 때 auto와 관련된 예제를 보여드리면 많은 분들이 아주 좋아하시더군요(좀 놀라기도 하시더군요^^). 어떤 분들은 딴 건 제쳐두고 이것 때문이라도 VC10을 사용해야겠다는 분들이 있었습니다.

 

이번 VC11에서도 'auto'와 같은 강력한 기능이 있습니다. 바로 'range base for' 입니다. 이것을 사용하면 반복문을 아주 쉽고, 강력하게 사용할 수 있습니다.

VC 특화 기능인 for each와 비슷하기 때문에 기존에 for each를 사용하고 있다면 이제는 range base for로 쉽게 바꾸어서 사용하면 됩니다.

 

 

예제를 통해 일반적인 for , VC for each, range base for문의 차이를 예제를 통해서 보겠습니다.

 

< 예제. 1 >

#include <iostream>

int main()

{

           int NumberList[5] = { 1, 2, 3, 4, 5 };

 

          

           std::cout << "일반적인 for " << std::endl;

          

           for( int i = 0; i < 5; ++i )

           {

                     std::cout << i << std::endl;

           }

 

 

           std::cout << "VC++ 특화의 for each" << std::endl;

 

           for each( int i in NumberList )

           {

                     std::cout << i << std::endl;

           }

 

 

           std::cout << "range base for " << std::endl;

 

           for( auto i : NumberList )

           {

                     std::cout << i << std::endl;

           }

 

           return 0;

}

 

< 실행 결과 >


<예제.1>을 보면 일반적인 for 문은

for( int i = 0; i < 5; ++i )

와 같이 시작과 종료 조건, 증가 값 이렇게 3개의 조건에 의해서 반복 됩니다.

 

그러나 range base for문은 VC만의 반복문인 for each와 비슷하게 데이터셋 변수와 이 데이터셋 요소의 타입을 선언하면 됩니다.

for( auto i : NumberList )

 

기존의 for 문에 비해서 또는 for each 보다도 간편해졌고, for each는 표준이 아닌 VC만의 기능인 것에 비해서 range base for C++ 표준 기능입니다.

 

range base for 문의 문법은 아래와 같습니다.

for ( for-range-declaration : expression ) statement

  

range base for 덕분에 반복문의 사용이 쉬워졌고, for 문을 사용할 때 종료 조건이 잘못되어 메모리 침범을 하는 위험도 피할 수 있게 되었습니다.

저작자 표시
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

[ VC11-C++11 ] enum - 전방선언

C++0x 2012.07.23 09:00 Posted by 흥배

unscoped enumeration scoped enumeration 둘 다 전방 선언을 할 수 있습니다.

 

아래와 같이합니다.

enum ITEMTYPE : short;

enum class CHARACTER_CLASS : short;

 

전방 선언을 할 때 unscoped enumeration은 타입 선언을 생략할 수 없지만 scoped enumeration은 타입 선언을 생략 할 수 있습니다.

 

아래 예제 코드를 보면 전방 선언을 올바르게 사용한 것과 잘못 사용한 예를 볼 수 있습니다.


< TypeDef.h >

 

#pragma once

 

enum ITEMTYPE : short

{

           WEAPON,

           EQUIPMENT,

           GEM                          = 10,

           DEFENSE,

};

 

enum class CHARACTER_CLASS1 : short

{

           WARRIOR                    = 1,     

           MONK,

           FIGHTER,

};

 

enum class CHARACTER_CLASS2

{

           WARRIOR                    = 1,     

           MONK,

           FIGHTER,

};

 

 

 

 

 

< Character.h >

 

#pragma once

 

enum ITEMTYPE : short;

//enum ITEMTYPE;                                          // 에러

//enum class ITEMTYPE : short;                       // 에러

 

 

enum class CHARACTER_CLASS1 : short;

//enum class CHARACTER_CLASS1;                  // 에러

//enum class CHARACTER_CLASS1 : int;           // 에러

//enum CHARACTER_CLASS1 : short;                // 에러

 

 

enum class CHARACTER_CLASS2;

 

 

 

struct Character

{

           ITEMTYPE m_ItemType;

          

           void SetItemType( ITEMTYPE Type );

 

 

           CHARACTER_CLASS1 m_Class;

          

           void SetClass( CHARACTER_CLASS1 CharClass );

};

 

 

 

 

< Character.cpp >

 

#include "Character.h"

#include "TypeDef.h"

 

 

void Character::SetItemType( ITEMTYPE Type )

{

           m_ItemType = Type;

}

 

void Character::SetClass( CHARACTER_CLASS1 CharClass )

{

           m_Class = CharClass;

}

 

 

저작자 표시
신고
크리에이티브 커먼즈 라이선스
Creative Commons License


 

티스토리 툴바