C++ 11 的新特性有哪些?
auto:auto 不能用来声明函数的返回值。
Range-based for loops (基于范围的 for 循环)。
nullptr
Override 和 final:
override,表示函数应当重写基类中的虚函数。
final,表示派生类不应当重写这个虚函数。
Strongly-typed enums 强类型枚举:
enum class Options {None, One, All};
Options o = Options::All;
Lambdas
非成员 begin() 和 end()
Move semantics (Move 语义)
thread:相信 Linux 程序员都用过 Pthread, 但有了 C11 的 std::thread 以后,你可以在语言层面编写多线程程序了,直接的好处就是多线程程序的可移植性得到了很大的提高,所以作为一名 C 程序员,熟悉 C++11 的多线程编程方式还是很有益处的。
int n = 0;
std::thread t1; // t1 is not a thread
std::thread t2(f1, n + 1); // pass by value
std::thread t3(f2, std::ref(n)); // pass by reference
std::thread t4(std::move(t3)); // t4 is now running f2(). t3 is no longer a thread
t2.join();
t4.join();
std::cout << "Final value of n is " << n << '\n';
recursive_mutex
std::recursive_mutex 与 std::mutex 一样,也是一种可以被上锁的对象,但是和 std::mutex 不同的是,std::recursive_mutex 允许同一个线程对互斥量多次上锁(即递归上锁),来获得对互斥量对象的多层所有权,std::recursive_mutex 释放互斥量时需要调用与该锁层次深度相同次数的 unlock(),可理解为 lock() 次数和 unlock() 次数相同,除此之外,std::recursive_mutex 的特性和 std::mutex 大致相同。
std::time_mutex 介绍
std::time_mutex 比 std::mutex 多了两个成员函数,try_lock_for(),try_lock_until()。