C++11新特性面试题

1. C++11引入了哪些重要特性?

答案:

  • 语言核心特性auto类型推导decltype类型推导nullptr空指针范围for循环lambda表达式右值引用和移动语义变参模板constexpr常量表达式
  • 标准库智能指针(shared_ptr、unique_ptr、weak_ptr)线程库(thread、mutex、condition_variable)正则表达式时间库(chrono)随机数库元组(tuple)
  • 容器unordered_map、unordered_setarrayforward_list

2. auto关键字的作用和使用场景?

答案:

  • 作用自动类型推导编译器根据初始化表达式推导类型必须初始化
  • 使用场景
// 简化复杂类型
auto it = map.begin();  // 代替 map<int,string>::iterator

// 模板类型
template<typename T, typename U>
auto add(T t, U u) -> decltype(t + u) {
    return t + u;
}

// 范围for循环
for (auto& elem : vec) {
    // ...
}

// lambda表达式
auto lambda = [](int x) { return x * 2; };
  • 注意事项auto会丢弃const和引用使用const auto&保留const和引用不能用于函数参数(C++14后可以)不能用于数组

3. lambda表达式的语法和使用?

答案:

  • 基本语法
[捕获列表](参数列表) -> 返回类型 { 函数体 }
  • 捕获方式[]:不捕获[=]:值捕获所有[&]:引用捕获所有[x]:值捕获x[&x]:引用捕获x[this]:捕获this指针[=, &x]:x引用捕获,其他值捕获
  • 使用示例
// 简单lambda
auto add = [](int a, int b) { return a + b; };

// 捕获外部变量
int factor = 2;
auto multiply = [factor](int x) { return x * factor; };

// 用于STL算法
vector<int> v = {3, 1, 4, 1, 5};
sort(v.begin(), v.end(), [](int a, int b) { return a > b; });

// 可变lambda
int count = 0;
auto counter = [count]() mutable { return ++count; };
  • 优势代码简洁就地定义可以捕获局部变量

4. 右值引用和移动语义是什么?

答案:

  • 右值引用用&&声明:int&& rref = 10;绑定到临时对象延长临时对象生命周期
  • 移动语义转移资源所有权,而非拷贝避免不必要的深拷贝提高性能
  • 移动构造函数
class MyString {
    char* data;
public:
    // 移动构造
    MyString(MyString&& other) noexcept 
        : data(other.data) {
        other.data = nullptr;
    }
    
    // 移动赋值
    MyString& operator=(MyString&& other) noexcept {
        if (this != &other) {
            delete[] data;
            data = other.data;
            other.data = nullptr;
        }
        return *this;
    }
};
  • std::move将左值转换为右值引用不移动任何东西,只是类型转换
string s1 = "hello";
string s2 = std::move(s1);  // s1被移动,不

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

C++ 常考面试题总结 文章被收录于专栏

本专栏系统梳理C++方向, 大中厂高频高频面试考点 , 内容皆来自真实面试经历,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力.

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务