1. RValue
우측값이라고도 불리며, STL알고리즘을 비롯하여 임시객체를 생성하고 파괴하는 일이 잦은 코드에서는 큰 성능 향상을 불러올 수 있는 개념입니다.
void Ex1()
{
std::vector<SomeClass> vec;
vec.push_back(SomeClass(1, 2, "3"));
}
2. 컨테이너에 emplace 메소드 추가
여기에 새로운 SomeClass 인스턴스를 추가하려고 하면 push_back(SomeClass(1, 2, "3")) 처럼 귀찮게 SomeClass를 타이핑해야합니다. 그런데 C++ 11에서는 이를 간편하게 하는 emplace 메소드 추가.
void Ex2()
{
std::vector<SomeClass> vec;
vec.push_back(SomeClass(1, 2, "3"));
vec.emplace_back(1, 2, "3");
}
3. auto
void Ex3()
{
std::vector<SomeClass> vec;
for(std::vector<SomeClass>::iterator it = vec.begin(); it != end(); ++it)
{
//something
}
}
void Ex4()
{
std::vector<SomeClass> vec;
for(auto it = vec.begin(); it != end(); ++it)
{
//something
}
}
4. ranged for loop
void Ex5()
{
std::vector<SomeClass> vec;
for(auto it : vec)
{
//something
}
}
5. lambda expression
void Ex6()
{
class Compare
{
public:
bool operator()(const SomeClass& o1, const SomeClass& o2) const
{
// compare function
}
};
std::vector<SomeClass> vec;
std::sort(vec.begin(), vec.end(), Compare());
}
void Ex6()
{
std::vector<SomeClass> vec;
std::sort(vec.begin(), vec.end(), [](const SomeClass& o1, const SomeClass& o2)
{
// compare function
});
}
6. std::function
void Ex7()
{
std::function<int(int, int)> op[] =
{
[](int a, int b) {return a + b;},
[](int a, int b) {return a - b;},
[](int a, int b) {return a * b;},
[](int a, int b) {return a / b;},
[someVar](int a, int b) {return a + b + someVar;},
};
for(auto f : op)
{
f(1, 1);
}
}
7. nullptr
8. enum class
9. 향상된 메모리 관리
void Ex8()
{
std::shared_ptr<SomeClass> ptr1 = std::shared_ptr<SomeClass>(new SomeClass(1, 2, "3")); // 1
auto ptr2 = std::shared_ptr<SomeClass>(new SomeClass(1, 2, "3")); // 2
auto ptr3 = std::make_shared<SomeClass>(1, 2, "3");
}
10. 정규표현식 라이브러리
11. Thread Support Library
std::map<std::string, std::string> g_pages;
std::mutex g_pages_mutex;
void save_page(const std::string &url)
{
std::this_thread::sleep_for(std::chrono::seconds(2));
std::string result = "fake content";
g_pages_mutex.lock();
g_pages[url] = result;
g_pages_mutex.unlock();
}
int main()
{
std::thread t1([](){save_page("http://foo")});
std::thread t2(save_page, "http://bar");
t1.join();
t2.join();
g_pages_mutex.lock();
for (const auto &pair : g_pages) {
std::cout << pair.first << " => " << pair.second << '\n';
}
g_pages_mutex.unlock();
}
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 캐스팅 static_cast / reinterpret_cast 예제 (0) | 2022.06.10 |
---|---|
C++ SFINAE 여러 타입에 대응하는 템플릿 오버로딩 (0) | 2022.06.10 |
C++ 콜백 CallBack 함수 (0) | 2022.06.09 |
C++ 유니폼 초기화와 생성자 (0) | 2022.06.07 |
C++ 함수 객체 (Fuction Object) 템플릿 / 람다식 (0) | 2022.06.06 |