C++11
- C++ 11(C++0x라고도 알려짐)은 [1] ISO가 2011년 8월 12일에 승인한 C++ 프로그래밍 언어의 최신판이다.
- GCC : v4.7부터 C++11으로 시험 적용함.
- Visual Studio : Visual Studio 12까지 부분 적용
keyword
auto
- auto 키워드는 변수를 초기화할 때 명시적으로 type을 지정하지 않고 auto로 지정할 수 있음.
- C#, Javascript의 var와 비슷함.
- 사용 범위 : 지역 변수에서만 사용 가능, 멤버 변수, 함수 인자, 전역 변수에서는 사용 불가.
- 실행 시점이 아닌 컴파일 시점에 자동으로 형을 결정하는 키워드임.
- pointer, const, reference로 사용 가능함.
- 템플릿 프로그래밍이나 STL 사용시 코드가 더 간단해짐.
auto NPCname = "BugKing";
auto Number = 1;
auto* pUserMode = &UserMode;
auto* CharInven = new CharacterInvenInfo();
lambda
- 람다함수, 이름없는 함수로 부르며 함수 객체와 같음
- C++ 규격에서 람다는 특별한 형을 가지고 있다.
- 'decltype'(C++11에서 새로 생김)과 'sizeof'에서는 사용할 수 없음.
- capture
- [&] [=] 와 같이 람다 함수 외부 변수들도 참조가 가능함
- reference가 아닌 value로 복사해서 람다함수 내부에서 수정하면 에러 발생함.
- mutable 키워드를 사용해야함.
- value 복사이기 때문에 내부에서 수정을 해도 람다함수를 빠져나오면 예전값으로 돌아옴.
int main() {
auto func = [] (int n){std::cout << "Number : " << n << std::endl; };
func();
return 0;
}
int main() {
float func = [] {return 3.14; };
float func = [] (float f) {return f; };
float func = [] () -> float {return 3.14; };
float f1 = func();
float f2 = func(3.14f);
float f3 = func();
}
example) c++ find_if
auto Iter = find_if(User,begin(), User.end(),
[](User& tUser) -> bool {return true == uTuser.IsDie(); }
);
struct FinDieUser
{
bool operator() (User& tUser) const
{
return tUser.IsDie();
}
};
Iter = find_if (User.begin(), User.end(), FinDieUser());
range based for
- for each를 range based for로 바꾸어서 사용하면 됨
int main()
{
int NumberList[5] = {1, 2, 3, 4, 5};
// normal for statement
for(int i = 0;i < 5;i++)
{
std::cout << i << std::endl;
}
// vc++ for each statement
for each (int i in NumberList)
{
std::count << i << std::endl;
}
// range base for statement
for(auto i : NumberList)
{
std::count << i << std::endl;
}
}
- std container를 사용할 수 있음.
- interator를 지원하는 컨테이너라면 사용가능함.
- & 연산자로 값을 직접 수정할 수 있음.
- const 를 사용하면 immutable 처리할 수 있음
int main()
{
std::vector<int> NumberList;
NumberList.push_back(1);
NumberList.push_back(2);
NumberList.push_back(3);
// range base for statement with std vector
for(auto i : NumberList)
{
std::count << i << std::endl;
}
std::unordered_map<int, std:;string> NumString;
NumString.insert(std::make_pair<int, std::string>(1, "1");
NumString.insert(std::make_pair<int, std::string>(2, "2");
NumString.insert(std::make_pair<int, std::string>(3, "3");
// range base for statement with unordered map
for(auto i : NumString)
{
std::count << i.first << i.second << std::endl;
}
}
https://ko.wikipedia.org/wiki/C%2B%2B11