C++ 关键字与特性详解

一、const 与 constexpr

1. const

  • 作用:定义运行时常量,防止意外修改
  • 应用场景
  • 特点: 运行期确定值可用于任何作用域必须初始化

2. constexpr (C++11)

  • 作用:定义编译期常量表达式
  • 应用场景
  • 特点: 编译期求值C++14放宽了对函数体的限制比const更严格的编译期检查

二、static 关键字

1. 静态局部变量

void counter() {
    static int count = 0;  // 只初始化一次
    ++count;
    cout << count << endl;
}

  • 特点:函数调用间保持值,存储在静态存储区

2. 静态成员

class MyClass {
    static int s_count;    // 静态成员变量
public:
    static void print() {  // 静态成员函数
        cout << s_count;
    }
};
int MyClass::s_count = 0;  // 类外初始化

  • 特点: 类所有实例共享静态函数只能访问静态成员没有this指针

3. 静态全局变量/函数

  • 限制作用域在当前文件
  • 避免命名冲突

三、volatile 关键字

1. 基本用法

volatile int flag = 0;  // 告诉编译器不要优化

2. 使用场景

  • 硬件寄存器访问
  • 多线程共享变量
  • 信号处理程序中的变量

3. 与const结合

const volatile int READ_ONLY_REGISTER = 0x1234;

  • 既不能被程序修改,又可能被外部改变

四、mutable 关键字

1. 使用场景

class Cache {
    mutable bool dirty;  // 可在const函数中修改
public:
    int getValue() const {
        dirty = true;    // 允许修改
        return value;
    }
};

2. 典型应用

  • 缓存标志
  • 互斥锁成员
  • 调试计数

五、explicit 关键字

1. 作用

禁止隐式类型转换

2. 应用示例

class String {
    explicit String(int size);  // 禁止 int->String 隐式转换
};
String s1(10);     // OK
String s2 = 10;    // 错误
String s3 = 'a';   // 错误

3. 使用建议

  • 所有单参数构造函数都应考虑使用
  • 避免意外的类型转换

六、inline 关键字

1. 基本用法

inline int max(int a, int b) {
    return a > b ? a : b;
}

2. 现代C++中的变化

  • 类内定义的成员函数默认inline
  • 链接时不产生多重定义错误
  • 编译器最终决定是否内联

3. 使用注意事项

  • 适合短小频繁调用的函数
  • 递归函数和虚函数通常不会被内联
  • 过度使用可能导致代码膨胀

七、现代C++新增关键字

1. auto (C++11)

auto i = 42;               // int
auto& r = i;               // int&
auto&& rr = i;             // int&
auto list = {1, 2, 3};     // std::initializer_list<int>

2. decltype (C++11)

int x = 0;
decltype(x) y = 1;         // y的类型是int
decltype(auto) z = y;      // 保留引用和const

3. override/final (C++11)

class Base {
    virtual void foo() final;  // 禁止重写
};
class Derived : public Base {
    void foo() override;       // 显式重写
};

4. noexcept (C++11)

void func() noexcept;       // 保证不抛出异常
void func() noexcept(true); // 条件性noexcept

八、关键字的组合使用

1. const + volatile

const volatile int hardware_register;

2. static + constexpr

static constexpr int MAX = 100;

3. inline + constexpr (C++17)

inline constexpr double pi = 3.1415926;

4. mutable + lambda

auto func = [x = 0]() mutable { return ++x; };

九、面试常见问题

  1. const和constexpr的主要区别是什么?const是运行时常量,constexpr是编译期常量
  2. 什么情况下必须使用mutable?需要在const成员函数中修改的成员变量
  3. 为什么推荐构造函数使用explicit?避免意外的隐式类型转换导致的bug
  4. static成员变量为什么需要在类外定义?需要分配存储空间,避免多重定义
  5. volatile在嵌入式开发中的作用?确保编译器不对硬件寄存器访问进行优化
  6. 现代C++中auto的使用场景?复杂类型声明、模板代码、lambda表达式等
  7. override关键字的作用?显式表明重写虚函数,增加代码可读性,编译器检查重写是否正确
全部评论
点赞 回复 分享
发布于 04-24 22:55 广东

相关推荐

05-16 16:39
已编辑
门头沟学院 Java
2025.5.14&nbsp;40min面试官介绍部门非常详细,lazada东南亚最大电商平台主要是结合项目问八股,也有项目中某些细节的具体实现,和数据库表的设计面试官很好,在问的过程中,一边在记录面评,面试中学到了很多。虽然也有些没答上来,或者没答到位,但是比阿里云的体验好多了。面试官先介绍实习招聘的流程,说Bravo102实习生招聘是统一面试的,最后拿到offer,会让同学自己选择想去的部门,双向选择。第一个没让自我介绍的公司1.&nbsp;Redis的过期删除策略2.&nbsp;具体的过期删除算法有哪些,绕了好久,最后发现他想问的是内存淘汰策越(LRU、LFU、随机删)3.&nbsp;Spring拦截器用到了吗,拦截器的底层原理4.&nbsp;拦截器和过滤器的区别5.&nbsp;Kafka怎么保证消息不丢失6.&nbsp;项目中Kafka具体怎么使用的7.&nbsp;消息异常,没有发出去该怎么解决8.&nbsp;重试具体是怎么做的,循环吗9.&nbsp;重试多次失败,怎么办,抛出异常吗10.&nbsp;消息一直没发出去是什么原因,分析一下11.&nbsp;SQL怎么优化的12.&nbsp;怎么判断是慢查询的13.&nbsp;怎么设计一个好的数据库14.&nbsp;说说项目的数据库表是怎么设计的,可以说字段、索引、外键等一些设计15.&nbsp;主键怎么设计的,普通递增,分布式中可以用雪花算法16.&nbsp;除了雪花算法和UUID,还有什么可以让主键不重复17.&nbsp;问具体的字段用什么类型设计的,比如用户名18.&nbsp;什么时候用到了JOIN19.&nbsp;left&nbsp;join、right&nbsp;join和outer&nbsp;join20.&nbsp;加密算法有哪些,什么区别21.&nbsp;项目中用到哪些Spring特性22.&nbsp;简单说说AOP是什么23.&nbsp;动态代理,有的基于接口,有的不基于接口,具体说说什么区别24.&nbsp;项目中哪些地方用到了AOP25.&nbsp;说一下设计模式,以及知道哪些常用的设计模式,项目中怎么用到设计模式的26.&nbsp;模版模式了解吗&nbsp;27.&nbsp;说说Spring中事务传播级别有哪些28.&nbsp;两个方法嵌套调用,A调用B,A发生异常时事务传播机制怎么设置,B发生异常时事务传播机制怎么设置29.&nbsp;Redis和数据库怎么保证数据一致性30.&nbsp;SpringCache了解吗31.&nbsp;说说线程池32.&nbsp;核心线程数根据什么设置33.&nbsp;说说Synchronized34.&nbsp;Synchronized&nbsp;和volatile&nbsp;的区别35.&nbsp;项目中或者哪些场景下用到volatile反问(虽然是东南亚平台,但是做技术的不需要国外出差,非常详细的介绍部门和业务大概有5分多钟)最后对问的问题也进行了总结,说可以钻研深入些,还有多看看源码。对于他问的问题,每个问题可以多说一点(比如说慢查询优化,可以从怎么选择存储引擎,项目数据量是多少,每个表怎么设计的,索引怎么设计,这些方面都可以说),不用等着他来问。关于分库分表,也要考虑表的规模。
点赞 评论 收藏
分享
评论
2
3
分享

创作者周榜

更多
牛客网
牛客企业服务