

新闻资讯
技术学院final是C++中的上下文关键字,仅在类定义后和虚函数声明末尾具有限定作用,其余位置可作普通标识符,不破坏既有代码兼容性。
final 在 C++ 中是上下文关键字(contextual keyword),不是传统意义上的“关键字”(reserved keyword),也不是普通标识符。
上下文关键字只在特定语法位置具有特殊含义,其他地方可作为普通标识符使用。C++11 引入 final 时特意将其设计为上下文关键字,以避免破坏已有代码兼容性——比如项目中若已存在名为 final 的变量、函数或类名,不会因此编译失败。
与之类似的还有 override(也用于虚函数声明)、import(C++20 模块)、module 等。
它只有在以下两种语境中才被识别为关键字,起限定作用:
立即学习“
C++免费学习笔记(深入)”;
例如:
class Base final { /* ... */ }; // 类 final只要不在上述两个语法位置出现,final 就是合法的用户自定义标识符:
int final = 42;struct final { }; void final() { }namespace final { }这些写法在 C++11 及以后标准下完全合法,编译器不会报错。
class、int、true 是保留关键字,不能用作标识符;而 final 不在保留关键字列表中(见 ISO/IEC 14882:2025 §5.10)。它的语义由上下文触发,解析器在分析类头或虚函数声明时才赋予其特殊含义。
这也意味着:宏定义 #define final something 在技术上可行(但强烈不建议),而 #define class something 会导致未定义行为。