C++–STL–C++11语言新特性(C++标准库第2版)
1、nullptr取代0或者NULL
void f(int);
void f(void*);
f(0);
f(NULL);
f(nullptr);
2、auto完成类型推导
auto i = 100;
vector<string> vec;
auto it = vec.begin();
3、一致性初始化与初值列
int arr[]{1, 2, 3};
vector<int> vec{2, 3, 4, 5, 6};
int j{};
int *p{};
cout << j << " " << p << endl;
int x1{5.1};
int x2(5.1);
void print(initializer_list<int> vals)
{
for(auto it = vals.begin(); it != vals.end(); ++it){
cout << *it << "\t";
}
cout << endl;
}
print({1, 2, 3, 4, 5});
class A
{
public:
explicit A(int value):m_a(value){}
private:
int m_a;
};
A a(100);
A b = 100;
4、for-range循环
for (auto &i : {1, 2, 3, 4})
{
cout << i << "\t";
}
cout << endl;
vector<string> vec{"123", "456", "789"};
for (const auto &j : vec)
{
cout << j << "\t";
}
cout << endl;
5、move和右值引用
int &&x1 = 100;
int &&x3 = std::move(x1);
6、新式字符串字面常量
cout << R"(\\n)" << endl;
7、关键字noexcept
void fun() noexcept;
8、关键字constexpr
constexpr int a = 100;
cout << a << endl;
9、模板Template特性
template <typename AnyType>
void Swapr(AnyType& a, AnyType& b);
int main()
{
string a = "123", b = "456";
Swapr(a,b);
cout << "a value: " << a << endl;
cout << "b value: " << b << endl;
return 0;
}
template<typename AnyType>
void Swapr(AnyType& a, AnyType& b)
{
AnyType temp;
temp = a;
a = b;
b = temp;
}
10、Lambda函数
auto fun = []{cout << "I'm lambda function!" << endl;};
fun();
auto fun1 = [](const int& x){cout << x << endl;};
fun1(100);
auto fun2 = []() -> double {return 12;};
cout << fun2() << endl;
int a = 10;
string b = " 123";
auto fun3 = [a, &b]{cout << a << b << endl;};
fun3();
11、关键字decltype
unordered_map<string, int> map;
decltype(map)::value_type elem;
12、强类型枚举enum class
enum day {Mon, Tue, Wed, Thu, Fri, Sat, Sun};
day x = Mon;
day y = day(2);
switch(x)
{
case Mon:
case Tue:
case Wed:
case Thu:
case Fri: cout << "oh, No" << endl; break;
case Sat:
case Sun: cout << "Yeah" << endl; break;
}
enum class Color{RED, BLUE, YELLORE};
enum class Color2{RED, YELLOR, GREEN};