本文已参与[新人创作礼]活动,一起开启掘金创作之路。
(欢迎大家关注我的微信公众号——控制工程研习,上面会分享很多我学习过程中总结的笔记。)
1. C++11了解哪些内容?
(在多个企业的面试题中面试官都问了这样的问题,C++11标准相比之前的标准C++98修正了约 600 个 C++ 语言中存在的缺陷,同时添加了约 140 个新特性,这使得C++语言焕然一新,所以在这里列举出了主要的新特性,具体的内容就不在此详细说明,大家可以在学习过程中进一步了解,但是需要知道这些特性是在C++11之后才有的)
(1)auto & deltyoe
auto:让编译器在编译器就推导出变量的类型,可以通过=右边的类型推导出变量的类型。
decltype:相对于auto用于推导变量类型,而decltype则用于推导表达式类型,这里只用于编译器分析表达式的类型,表达式实际不会进行运算。
(2)右值引用
这里面的概念非常多。
(3)列表初始化
在C++11中可以直接在变量名后面加上初始化列表来进行对象的初始化。
(4)std::function & std::bind & lambda表达式
(5)模板的改进
(6)智能指针
c++11引入了三种智能指针:\
std::shared_ptr
std::weak_ptr
std::unique_ptr
(7)基于范围的for循环\
vector<int> vec;
for (auto iter = vec.begin(); iter != vec.end(); iter++)
{
// before c++11
cout << *iter << endl;
}
for (int i : vec) {
// c++11基于范围的for循环
cout << "i" << endl;
}
(8)委托构造函数
委托构造函数允许在同一个类中一个构造函数调用另外一个构造函数,可以在变量初始化时简化操作。
(9)继承构造函数
继承构造函数可以让派生类直接使用基类的构造函数,如果有一个派生类,我们希望派生类采用和基类一样的构造方式,可以直接使用基类的构造函数,而不是再重新写一遍构造函数
(10)nullptr
nullptr是c++11用来表示空指针新引入的常量值,在c++中如果表示空指针语义时建议使用nullptr而不要使用NULL,因为NULL本质上是个int型的0,其实不是个指针。
(11)final & override
c++11关于继承新增了两个关键字,final用于修饰一个类,表示禁止该类进一步派生和虚函数的进一步重载,override用于修饰派生类中的成员函数,标明该函数重写了基类函数,如果一个函数声明了override但父类却没有这个虚函数,编译报错,使用override关键字可以避免开发者在重写基类函数时无意产生的错误。
(12)default
c++11引入default特性,多数时候用于声明构造函数为默认构造函数,如果类中有了自定义的构造函数,编译器就不会隐式生成默认构造函数
(13)delete
我们有时候想禁止对象的拷贝与赋值,可以使用delete修饰
(14)explicit
explicit专用于修饰构造函数,表示只能显式构造,不可以被隐式转换.
(15)constexpr
constexpr是c++11新引入的关键字,用于编译时的常量和常量函数。
(16)enum class
c++11新增有作用域的枚举类型。
此外还有很多C++11新增的特性,可以通过下面C语言中文网进行学习: