C++--问题15--讲讲C++11有哪些新特性

C++--问题15--请你讲讲C++11有哪些新特性?


简单的说了几个特性。

1.auto,编译器可以根据初始值自动推到其类型,但是不能用于函数传参以及数组类型的推导


auto a; // 错误,auto是通过初始化表达式进行类型推导,如果没有初始化表达式,就无法确定a的类型  
auto i = 1;  
auto d = 1.0;  
auto str = "Hello World";  
auto ch = 'A';  
auto func = less<int>();  
vector<int> iv;  
auto ite = iv.begin();  
auto p = new foo() // 对自定义类型进行类型推导 

2.智能指针shared_ptr和weak_ptr,解决内存管理问题

3.nullptr,可以转化成任意的其他类型指针,为了解决原来C++中NULL的二义性问题而引进的一种新的类型,因为NULL实际上代表的是0。

4.序列for循环

在C++中for循环可以使用类似java的简化的for循环,可以用于遍历数组,容器,string以及由begin和end函数定义的序列(即有Iterator),示例代码如下:

map<string, int> m{
   
   {"a", 1}, {"b", 2}, {"c", 3}};  
for (auto p : m){  
    cout<<p.first<<" : "<<p.second<<endl;  
} 

5.更加优雅的初始化方法

在引入C++11之前,只有数组能使用初始化列表,其他容器想要使用初始化列表,在C++11中,我们可以这样初始化:

int arr[3]{1, 2, 3};  
vector<int> iv{1, 2, 3};  
map<int, string>{
   
   {1, "a"}, {2, "b"}};  
string str{"Hello World"}; 

6.在C++11中引入了变长参数模板,所以发明了新的数据类型:tuple,tuple是一个N元组,可以传入1个, 2个甚至多个不同类型的数据。像这样:


auto t1 = make_tuple(1, 2.0, "C++ 11");  
auto t2 = make_tuple(1, 2.0, "C++ 11", {1, 0, 2}); 

猜你喜欢

转载自blog.csdn.net/qq_41103495/article/details/108760899