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 新特性的主要内容,如果未能解决你的问题,请参考以下文章

C++ 11 新特性

C++:C++11新特性超详细版

C++ 11 新特性之正则表达式

C++11新特性:1—— C++ 11是什么,C++ 11标准的由来

C++开发者都应该使用的10个C++11特性

c++新特性11 (10)shared_ptr一”概述“