728x90

enum은 C++에서 이미 있는 키워드이다. 그러나 C++11에서는 C++03 표준과 달리 'unscoped enumeration'과 'scoped enumeration' 두 종류의 enum으로 바뀌었다.


1. unscoped enumeration은 기존(C++03) enum과 비슷하다. unscoped enumeration은 다음과 같이 정의한다.


2. scoped enumeration은 다음과 같이 정의 한다.


ps. enum class 대신 enum struct를 사용할 수도 있다.



728x90
728x90

이 range based for는 Visual C++(VC)의 특화 기능인 'for each'문과 비슷하다.



당연히 STL에서도 사용이 가능하다. 그러므로 STL의 Iterator를 지원하는 컨테이너라면 'range based for'를 활용하여 편하게 사용하도록 하자.


for( auto i : arrNumberList )의 경우에는 i의 값을 for문 안에서는 변경할 수 있찌만, for 문을 나오면 arrNumberList의 요소에는 적용되지 않는다. 


만약 요소의 값을 변경하고 싶다면 참조를 사용하면된다. for( auto& i : arrNumberList )


또한 for문에서 요소 값을 변경하지 못하도록 하려면 const를 사용하면 된다. for(auto const i : arrNumberList)


마지막으로 for문에서 데이터셋 요소에 접근할 때 임시 변수를 만드므로 이 비용을 줄이고 싶다면, 참조를 사용하는 게 좋다.

만약 요소 값을 변경하지 못하게 하고 싶다면 const 참조를 사용하면 된다. for(auto const &i : arrNumberList)





728x90

'Basic Programming > C++ 11' 카테고리의 다른 글

C++11 - nullptr  (0) 2016.02.26
C++11 - enum  (0) 2016.02.26
C++11 - 람다(lambda) 함수 - 2  (0) 2016.02.25
C++11 - 람다(lambda) 함수 - 1  (0) 2015.12.08
C++11 - auto 키워드  (0) 2015.12.08
728x90

람다를 사용할 때 람다 외부에 정의되어 있는 변수를 람다 내부에서 사용하고 싶으면 그 변수를 캡쳐(Capture)하면 된다. 캡처는 참조나 복사로 전달이 가능하다. 참조로 할 때는 '&'를, 복사로 전달할 때는 '변수 이름'을 기술한다.


람다 표현의 '[ 람다 캡쳐 ] ( 파라미터 ) { 식 }' 중에서 맨 앞의 '[ 람다 캡쳐 ]'에 캡처할 변수를 기술한다.


다음과 같이 '[ &v1, &v2 ]' 사용하면 복수의 변수를 캡처할 수 있다.


또한 다음과 같이 '[&]' 사용하면 람다 외부의 모든 변수를 참조로 캡처할 수 있다.



728x90

'Basic Programming > C++ 11' 카테고리의 다른 글

C++11 - nullptr  (0) 2016.02.26
C++11 - enum  (0) 2016.02.26
C++11 - range based for  (0) 2016.02.25
C++11 - 람다(lambda) 함수 - 1  (0) 2015.12.08
C++11 - auto 키워드  (0) 2015.12.08
728x90

람다(lambda)는 '람다 함수' 또는 '이름 없는 함수'라고 부르며, 그 성질은 함수 객체와 같다.


기존 C++에서 STL의 find_if, sort 등의 알고리즘을 사용할 때 특정 조건자를 사용하려면 함수 객체를 정의해야 했다.

그런데 STL 알고리즘 함수에서만 사용하려고 따로 함수 객체를 만들려니 귀찮을 수 밖에 없었다.

그래서 보통은 함수를 따로 만들거나, 함수를 정의하는 것도 귀찮아서 그냥 STL을 사용안하고 직접 컨테이너를 다루었다.

람다 덕택에 이제는 이런 수고를 할 필요가 없어졌다.


람다의 기본 문법은 다음과 같다.


다음은 람다의 간단한 사용 예다.


auto를 사용하면 람다를 변수에 대입 할 수도 있다.


람다는 일반 함수처럼 파라미터를 정의 할 수도 있다.


반환 값도 사용할 수 있다.


find_if를 쓸 때에는 더욱 유용한 것을 느낄 수 있다.


기존에는 다음과 같이 find_if 알고리즘을 이용해서 '죽은 유저'를 찾으려면 다음과 같이 함수 객체를 정의해야 했다. 

하지만 람다를 사용하게 되면, 한 줄로 간단하게 끝낼 수 있다.



* 람다는 'decltype' 과 'sizeof' 에서는 사용할 수 없다.

728x90

'Basic Programming > C++ 11' 카테고리의 다른 글

C++11 - nullptr  (0) 2016.02.26
C++11 - enum  (0) 2016.02.26
C++11 - range based for  (0) 2016.02.25
C++11 - 람다(lambda) 함수 - 2  (0) 2016.02.25
C++11 - auto 키워드  (0) 2015.12.08
728x90

아마도 C++ 11에서 가장 인기 있는 기능이 auto일 것이다. auto를 가장 잘 말해주는 예는


 

위 처럼 써야 할 것을 C++ 11에서는 


이렇게 쓸 수 있다. 


역시 auto는 그냥 일반 자료형 보다는 STL을 사용할 때 훨씬 편하게 코딩할 수 있게 만들어 준다.


* auto는 지역 변수에서만 사용할 수 있으므로, 클래스의 멤버 변수나 전역 변수, 함수의 인자로는 사용할 수 없다.

* auto는 '변수를 정의할 때 명시적으로 형을 지정하지 않고 컴파일을 할 때 자동으로 결정해주는 키워드' 이다.


728x90

'Basic Programming > C++ 11' 카테고리의 다른 글

C++11 - nullptr  (0) 2016.02.26
C++11 - enum  (0) 2016.02.26
C++11 - range based for  (0) 2016.02.25
C++11 - 람다(lambda) 함수 - 2  (0) 2016.02.25
C++11 - 람다(lambda) 함수 - 1  (0) 2015.12.08

+ Recent posts