C++11引入了许多新的语言特性和标准库更新,以下是一些常见的C++11面试问题和答案:
1. C++11的重要特性:
- 问题:列举一些C++11引入的重要特性。
- 答案:C++11引入了众多特性,包括自动类型推断(`auto`关键字)、范围循环(range-based for loop)、Lambda表达式、右值引用(`&&`)、智能指针(`std::shared_ptr`和`std::unique_ptr`)、新的容器(如`std::unordered_map`和`std::unordered_set`)、多线程支持(`std::thread`和`std::mutex`等)、初始化列表(`initializer_list`)、移动语义(Move Semantics)等。
2. Lambda表达式:
- 问题:什么是Lambda表达式,如何使用它们?
- 答案:Lambda表达式是一种用于创建匿名函数的方式,它可以在需要函数对象时方便地定义函数。Lambda表达式的语法为:`[capture](parameters) -> return_type { body }`。其中,`capture`指定了Lambda表达式访问的外部变量,`parameters`定义了Lambda函数的参数,`return_type`指定返回类型,`body`包含Lambda函数的实际代码。Lambda表达式允许在函数内联定义、捕获外部变量,并以方便的方式定义匿名函数。
3. 智能指针:
- 问题:什么是智能指针,为什么它们有用?
- 答案:智能指针是C++11引入的智能内存管理工具,包括`std::shared_ptr`和`std::unique_ptr`。它们有助于避免内存泄漏和管理动态分配的内存。`std::shared_ptr`是共享所有权的指针,多个`shared_ptr`可以指向相同的对象,当最后一个`shared_ptr`离开作用域时,对象会被销毁。`std::unique_ptr`是独占所有权的指针,只能有一个`unique_ptr`指向对象,当离开作用域时,对象会被销毁。
4. 移动语义:
- 问题:什么是移动语义,如何使用右值引用和移动构造函数?
- 答案:移动语义是C++11引入的特性,允许将资源(如动态分配的内存)从一个对象移动到另一个对象,而不是进行深层拷贝。右值引用(Rvalue Reference)通过`&&`表示,用于标识临时对象或将要销毁的对象。移动构造函数允许以高效方式从一个右值对象“窃取”资源。这提高了性能,特别是在容器的元素移动和返回临时对象时。
5. 并发编程:
- 问题:C++11引入了哪些多线程支持的特性,如何创建和管理线程?
- 答案:C++11引入了多线程支持,包括`std::thread`类用于创建线程,`std::mutex`用于互斥锁,`std::condition_variable`用于线程同步等。通过`std::thread`创建线程,可以使用`std::mutex`进行互斥访问共享资源,而`std::condition_variable`用于线程之间的通信和同步。