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});