C++ 11 新特性
Posted 早杰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 11 新特性相关的知识,希望对你有一定的参考价值。
一.统一的初始化方法
1 int arr[3]{1, 2, 3}; 2 vector<int> iv{1, 2, 3}; 3 map<int, string> mp{{1, "a"}, {2, "b"}}; 4 string str{"Hello World"}; 5 int * p = new int[20]{1,2,3}; 6 struct A { 7 int i,j; A(int m,int n):i(m),j(n) { } 8 }; 9 A func(int m,int n ) { return {m,n}; } 10 int main() { A * pa = new A {3,7}; }
二.成员变量默认初始值
1 class B 2 { 3 public: 4 int m = 1234; 5 int n; 6 }; 7 int main() 8 { 9 B b; 10 cout << b.m << endl; //输出 1234 11 return 0; 12 }
三.auto关键字
用于定义变量,编译器可以自动判断变量的类型
1 auto i = 100; // i 是 int 2 auto p = new A(); // p 是 A * 3 auto k = 34343LL; // k 是 long long 4 map<string,int,greater<string> > mp; 5 for( auto i = mp.begin(); i != mp.end(); ++i) 6 cout << i->first << "," << i->second; 7 //i的类型是: map<string,int,greater<string> >::iterator 8 9 class A { }; 10 A operator + ( int n,const A & a) 11 { 12 return a; 13 } 14 template <class T1, class T2> 15 auto add(T1 x, T2 y) -> decltype(x + y) { 16 return x+y; 17 } 18 auto d = add(100,1.5); // d是double d=101.5 19 auto k = add(100,A()); // d是A类型
四.decltype 关键字
求表达式的类型
1 int i; 2 double t; 3 struct A { double x; }; 4 const A* a = new A(); 5 decltype(a) x1; // x1 is A * 6 decltype(i) x2; // x2 is int 7 decltype(a->x) x3; // x3 is double 8 decltype((a->x)) x4 = t; // x4 is double&
五.智能指针shared_ptr
? 头文件: <memory>
? 通过shared_ptr的构造函数,可以让shared_ptr对象托管一个new运算符返回的指针,写法如下:回的指针,写法如下:回的指针,写法如下:
shared_ptr<T> ptr(new T); // T 可以是 int ,char, 类名等各种类型
此后ptr就可以像 T* 类型的指针一样来使用,即 *ptr 就是用new动态分配的
那个对象,而且不必操心释放内存的事。
? 多个shared_ptr对象可以同时托管一个指针,系统会维护一个托管计数。当
无shared_ptr托管该指针时, delete该指针。
? shared_ptr对象不能托管指向动态分配的数组的指针,否则程序运行会出错
1 #include <memory> 2 #include <iostream> 3 using namespace std; 4 struct A { 5 int n; 6 A(int v = 0):n(v){ } 7 ~A() { cout << n << " destructor" << endl; } 8 }; 9 int main() 10以上是关于C++ 11 新特性的主要内容,如果未能解决你的问题,请参考以下文章