【面试题】请说下在C++11用过哪些特性?

时间:2024-10-07 11:09:43

文章目录

  • 一、语法糖:
    • 1. 关键字
    • 2. 语法
  • 二、stl容器:
  • 三、智能指针:
  • 四、多线程:语言本身提供一些多线程的接口


一、语法糖:

1. 关键字

  1. auto、decltype:都是用来做类型推导。
  2. nullptr:NULL在函数重载的时候被认为是整数,void*函数重载的时候会重载到具体的int类型的函数去;nullptr是具体的空指针,用这种方式才会去匹配一个指针类型的模板参数,主要为了类型安全。
  3. final、override:override就是用来覆盖复写基类的虚函数,final说明继承中某函数不能被覆盖了或不能被继承了。
  4. constexpr:常量表达式,在声明编译时,让编译器就对函数或变量进行求值。

2. 语法

  1. 基于范围的for循环:利用auto关键字取出具体的元素或引用,冒号后面跟具体的容器或者基于范围的一个类型。

  2. function函数对象:包装一个可执行体,将一个函数转换成一个具体的对象。

    bind

    lambda

  3. 目的:写代码更便捷,更严谨。编译器做更多的事情

二、stl容器:

  1. array:数组
  2. forward_list:单链表,list是双向链表
  3. unordered_map、unordered_map:基于key-value散列表实现的容器。根据key可以快速查找到value

三、智能指针:

  1. shared_ptr:基于共享的智能指针,有多个对象指向同一资源,就用shared_ptr,里面主要是使用引用计数来实现的;

    可能会产生循环引用,用weak_ptr来解决循环引用,因为weak_ptr引用时不会占用引用计数。

  2. unique_ptr:只允许一个对象去指向一个具体的资源。

四、多线程:语言本身提供一些多线程的接口

  1. thread:以前需要传递函数指针,包括参数和一些上下文,现在可以通过bind或lambda传递一个函数对象,更加便捷。
  2. mutex、lock_guard:互斥锁
  3. condition_variable:条件变量
  4. atomic:原子变量,通过同步语义去标记那些需要同步的变量和操作,本质上告诉CPU和编译器不要对这些变量或操作做违反一致性的优化,从而达到和加锁一样的效果,保证程序没有数据竞争