在上一课,我们学会了C++的“起名艺术”,也就是“标识符”(Identifiers)。你知道了你可以创造自己的“标签”,比如 int playerHealth = 100; 里的 playerHealth

现在,我们要来聊聊那些你绝对不能碰的名字。

一个简单的比喻:
如果说C++是一门“魔法语言”:

  • 标识符 (Identifiers):是你(魔法师)给你的“魔瓶”和“宠物”起的自定义名字,比如 userAgeplayerHealth
  • 关键词 (Keywords):是这门语言自带的、古老的“魔法咒语”,比如 int, if, class

当你使用 int 时,你就在“吟唱”一个法术,告诉编译器:“我要创造一个装整数的魔瓶!”
当你使用 if 时,你就在“吟唱”一个法术,告诉电脑:“准备做一个选择!”

你为什么不能用它们?
试想一下,如果你被允许给你的“宠物”(变量)起名叫 if
int if = 10;
… 当你下次吟唱 if (x > 10) 时,编译器就彻底“精神错乱”了。
它会问:“你到底是在叫你的‘宠物’ if,还是在吟唱‘如果’这个法术?!”

为了避免这种混乱,C++语言**“保留” (Reserved)** 了这些“咒语”,它们只准用来施法,严禁用来给你自己的东西命名。

在本教程中,你将学会:

  • 你一个都不用背! 如何用你的编辑器(IDE)瞬间识别所有关键词。
  • 关键词 vs 标识符:亲眼目睹“编译大爆炸”是什么样的。
  • coutstring 为什么不是关键词?(一个常见困惑)
  • 新手最先会遇到的“五大家族关键词”。

前置知识说明:

  • ✔️ 你只需要知道 int main() 是什么就够了!

第一部分:“代码“变色”——你一个都不用背的秘密

你可能会在别的教程里看到一张密密麻麻的表格,列出了C++20标准的90多个关键词(比如 asm, volatile, co_await…)。

请不要去背诵它们!
一个新手完全不需要记忆它们。

你的“火眼金睛”就是你的IDE(VS Code)!

你的代码编辑器(VS Code、Visual Studio、CLion等)早就把所有90多个关键词背得滚瓜烂熟了。为了“保护”你,也为了“提醒”你,当你打出这些词时,IDE会立刻改变它们的颜色

动手试试!(“实时”体验)

  1. 打开你的VS Code,随便创建一个 test.cpp 文件。
  2. main 函数里,试着打下面这些词:
int main() {
    // 试着打 "int",它立刻变成了“蓝色”或“紫色”
    int myVar; 

    // 试着打 "if",它也变成了“蓝色”或“紫色”
    if (true) {}

    // 试着打 "class",它也变成了“蓝色”或“紫色”
    class MyClass {};

    // 现在,试着打你自己的名字
    int playerHealth; // "playerHealth" 是“白色”或“亮蓝色”
}

结论很明显:

  • 那些变了“特殊颜色”(通常是蓝色或紫色)的单词,就是关键词!
  • 那些保持“普通颜色”(通常是白色或亮蓝色)的单词,就是标识符!

你的IDE就是你最强的“关键词识别器”。你只需要相信它的高亮,永远不要试图用一个“变了色”的单词去当你的变量名。


第二部分:“编译大爆炸”——当你抢用了“咒语”

让我们“亲眼”看看,如果你非要抢一个“咒语”来当你的“宠物”名字,会发生什么。

“手把手”终端模拟:

假设你写了下面的代码 error.cpp

#include <iostream>
using namespace std;

int main() {
    // 噢,灾难!你试图给一个变量起名叫 "int"
    int int = 10; 
    
    cout << int << endl;
    return 0;
}

现在,我们来“烤蛋糕”(编译)它:

# 你在终端里尝试编译
PS C:\Users\YourName\Desktop\MyCode> g++ error.cpp -o error.exe

# 按下回车... 编译器立刻“大声尖叫”!
# (编译失败!)
error.cpp: In function 'int main()':
error.cpp:5:9: error: expected identifier before '=' token
     int int = 10;
         ^~~

编译器在说什么?
error: expected identifier before '=' token

  • 翻译成人话: “我在第5行第9个字符(=号)前面,期待 (expected) 看到一个‘标识符’(identifier)(你起的名字),结果我却看到了一个‘int’(我的咒语)!你疯了吗?!”

这就是“编译大爆炸”。你让编译器陷入了逻辑混乱。


第三部分:新手最先遇到的“五大家族”

你不需要知道所有90个,但在C++的初级阶段,你几乎每天都会和这几大家族关键词打交道:

  1. “类型”家族 (Tells the magic bottle what it can hold):

    • int, double, float, char, bool, void, auto
  2. “流程”家族 (Controls the flow):

    • if, else, switch, case
  3. “循环”家族 (Repeats actions):

    • for, while, do, break, continue
  4. “C++灵魂”家族 (The C++ magic):

    • class, struct, public, private, protected, new, delete, this
  5. “功能”家族 (Other must-knows):

    • return, using, namespace, const, true, false

你只需要在VS Code里眼熟它们,知道“哦,这个词会变色,我不能用它当名字”就足够了。


一个常见困惑:coutstring 为什么不是关键词?

这是个“陷阱题”,也是个高频面试题。

  • int 是关键词吗? 是。
  • if 是关键词吗? 是。
  • cout 是关键词吗? 不是!
  • string 是关键词吗? 不是!

为什么?!
回到我们的比喻:

  • 关键词 (int, if) 是语言内置的、古老的“魔法咒语”。编译器(g++)被制造出来时,就已经把它们“焊死”在脑子里了。你不需要#include任何东西,编译器都认识int

  • coutstring 是C++“标准库” (Standard Library) 里的工具。

    • 它们就像是后人(C++标准委员会)打造的、放在一个叫 std 的“官方工具箱”里的高级“魔法道具”
    • 编译器天生不认识 cout 是什么!
    • 你必须在程序开头写 #include <iostream>,这句代码就是在告诉编译器:“嘿,去把那个叫 iostream 的‘道具说明书’拿过来,我待会儿要用里面的 cout 道具!”
    • 如果你删掉 #include <iostream>,你的程序会在 cout 那一行立刻“爆炸”,编译器会说:error: 'cout' was not declared in this scope(“你说的cout是个啥玩意?我没听说过!”)

结论:

  • 关键词:编译器“天生”就懂,会变色,绝对不能当名字。
  • 标准库(如cout:编译器“后天”学习(通过#include)才懂,它们也不是关键词,但你也不应该用它们当名字(这会引起逻辑混乱)。

动手试试!

  1. “变色龙”测试
    打开你的VS Code,在 main 函数里,逐个打出“五大家族”里的词(比如 int, if, for, class, return)。亲眼看着它们改变颜色。
  2. “爆炸”测试
    试着写一行 int for = 10;。不要运行,你甚至不需要编译,VS Code的“X光”插件(IntelliSense)会立刻for 下面画出红色波浪线,警告你:“你正在试图引爆一个‘法术’!”

欢迎在评论区分享你的发现:你还注意到了哪些词会“自动变色”?

更多推荐