《解码 C/C++ 关键字:科技编程的核心指令集》
序号 | 语言 | 关键字 | 原型 | 实现原理 | 功能 | 返回值类型 | 使用示例 | 注意事项 | 应用场景 |
1 | C | auto | auto 数据类型 变量名; | 函数调用时在栈上分配内存,函数结束自动释放 | 声明自动变量,变量生命周期限于函数执行期间 | 无 | c<br>void func() {<br> auto int num = 10;<br> printf("%d\n", num);<br>}<br> | C 语言中局部变量默认是 auto,此关键字使用较少 | 在函数内部临时使用的变量,不希望其占用过多内存资源时使用 |
2 | C | break | break; | 执行时立即终止当前所在的 for、while、do - while 循环或 switch 语句 | 提前结束循环或 switch 语句,控制程序流程 | 无 | c<br>for (int i = 0; i < 10; i++) {<br> if (i == 5) {<br> break;<br> }<br> printf("%d ", i);<br>}<br> | 只能用于循环和 switch 语句 | 当在循环中满足某个条件,需要立即退出循环时使用;在 switch 语句中,用于跳出当前 case 分支 |
3 | C | case | case 常量表达式: 语句; | switch 表达式的值依次与 case 后的常量表达式比较,匹配则执行对应语句 | 在 switch 语句中提供多分支选择 | 无 | c<br>int num = 2;<br>switch (num) {<br> case 1:<br> printf("One\n");<br> break;<br> case 2:<br> printf("Two\n");<br> break;<br> default:<br> printf("Other\n");<br>}<br> | case 后必须是常量表达式,且不同 case 值不能重复 | 根据一个变量的不同取值执行不同的代码块,如菜单选择、状态判断等 |
4 | C | char | char 变量名; | 通常占用 1 字节内存,存储字符的 ASCII 码值 | 处理字符数据 | 作为函数返回类型时返回字符类型值 | c<br>char getChar() {<br> return 'A';<br>}<br> | 字符存储本质是整数,可进行算术运算 | 处理字符输入输出、字符串操作、字符编码转换等场景 |
5 | C | const | const 数据类型 变量名; | 编译器检查,防止对初始化后的变量修改 | 声明常量,提高代码安全性和可读性 | 无 | c<br>const int num = 10;<br>// num = 20; // 编译错误<br> | 常量一旦初始化不能修改,若通过指针绕过检查修改是未定义行为 | 定义一些固定不变的值,如圆周率、重力加速度等,防止在程序中意外修改 |
6 | C | continue | continue; | 跳过当前循环体剩余语句,直接进入下一次循环判断 | 控制循环流程,跳过不必要操作 | 无 | c<br>for (int i = 0; i < 10; i++) {<br> if (i % 2 == 0) {<br> continue;<br> }<br> printf("%d ", i);<br>}<br> | 只能用于循环语句 | 在循环中,当某个条件满足时,跳过当前循环的剩余部分,继续下一次循环,如筛选特定条件的数据 |
7 | C | default | default: 语句; | switch 表达式值与所有 case 不匹配时执行 | 为 switch 语句提供默认执行分支 | 无 | 见 case 示例 | default 可省略,位置不固定,但习惯放在最后 | 在 switch 语句中,当所有 case 条件都不满足时,执行默认的操作 |
8 | C | do | do { 语句块; } while (条件表达式); | 先执行一次循环体,再判断 while 条件,为真则继续循环 | 实现至少执行一次循环体的循环结构 | 无 | c<br>int i = 0;<br>do {<br> printf("%d ", i);<br> i++;<br>} while (i < 5);<br> | 循环体至少执行一次,条件判断在循环体之后 | 需要确保循环体至少执行一次的场景,如用户输入验证,先让用户输入一次,再判断输入是否合法 |
9 | C | double | double 变量名; | 通常占用 8 字节内存,提供高精度小数表示 | 处理高精度浮点数运算 | 作为函数返回类型时返回双精度浮点数 | c<br>double getDouble() {<br> return 3.14159;<br>}<br> | 浮点数比较不能直接用 ==,需考虑精度误差 | 在需要高精度计算的场景中使用,如科学计算、金融计算等 |
10 | C | else | if (条件表达式) { 语句块 1; } else { 语句块 2; } | if 条件为假时执行 else 后的语句块 | 为 if 语句提供另一执行分支 | 无 | c<br>int num = 5;<br>if (num > 10) {<br> printf("Greater than 10\n");<br>} else {<br> printf("Less than or equal to 10\n");<br>}<br> | else 必须和 if 配对使用 | 根据条件的真假执行不同的代码块,实现程序的分支逻辑 |
11 | C | enum | enum 枚举类型名 { 枚举常量 1, 枚举常量 2, ... }; | 定义一组命名常量,默认从 0 递增,可手动指定值 | 定义相关常量集合,提高代码可读性 | 作为函数返回类型时返回枚举类型值 | c<br>enum Color { RED, GREEN, BLUE };<br>enum Color getColor() {<br> return GREEN;<br>}<br> | 枚举常量本质是整数,可进行比较和赋值 | 用于定义一组相关的常量,如表示状态、颜色、星期等,使代码更具可读性和可维护性 |
12 | C | extern | extern 数据类型 变量名; 或 extern 返回类型 函数名(参数列表); | 编译时标记引用,链接阶段去其他文件查找定义 | 实现多文件间变量和函数共享 | 无 | c<br>// file1.c<br>#include <stdio.h><br>extern int num;<br>void print_num() {<br> printf("%d\n", num);<br>}<br>// file2.c<br>int num = 10;<br>#include <stdio.h><br>int main() {<br> print_num();<br> return 0;<br>}<br> | extern 只是声明,变量或函数定义必须在其他文件中 | 在大型项目中,多个文件需要共享变量或函数时使用 |
13 | C | float | float 变量名; | 通常占用 4 字节内存,用于表示小数 | 处理对精度要求不高的浮点数运算 | 作为函数返回类型时返回单精度浮点数 | c<br>float getFloat() {<br> return 2.71f;<br>}<br> | 单精度浮点数精度低于双精度,使用时需注意精度损失 | 在对精度要求不高,且需要节省内存的场景中使用,如游戏开发中的一些简单计算 |
14 | C | for | for (初始化表达式; 条件表达式; 循环后操作表达式) { 语句块; } | 先执行初始化表达式,再判断条件,为真则执行循环体和循环后操作,重复判断 | 实现已知循环次数的循环结构 | 无 | c<br>for (int i = 0; i < 5; i++) {<br> printf("%d ", i);<br>}<br> | 初始化、条件和循环后操作表达式可省略,但分号不能省略 | 当需要执行固定次数的循环时使用,如数组遍历、重复执行某段代码等 |
15 | C | goto | goto 标签名; 标签名: 语句; | 无条件跳转到指定标签处 | 特定情况下实现程序跳转 | 无 | c<br>int i = 0;<br>start:<br> printf("%d ", i);<br> i++;<br> if (i < 5) {<br> goto start;<br> }<br> | 过度使用会使代码结构混乱,可读性降低,应谨慎使用 | 在某些特定的错误处理场景中,需要快速跳转到错误处理代码处时使用 |
16 | C | if | if (条件表达式) { 语句块; } | 计算条件表达式值,为真则执行语句块 | 根据条件控制程序执行流程 | 无 | c<br>int num = 5;<br>if (num > 0) {<br> printf("Positive\n");<br>}<br> | 条件表达式结果必须是布尔值或可隐式转换为布尔值 | 根据不同的条件执行不同的代码块,实现程序的逻辑判断 |
17 | C | int | int 变量名; | 通常占用 4 字节内存,存储整数 | 处理整数运算 | 作为函数返回类型时返回整数类型值 | c<br>int getInt() {<br> return 10;<br>}<br> | 整数运算可能会溢出,需注意范围 | 在处理整数数据的场景中使用,如计数、索引等 |
18 | C | long | long 变量名; | 长度因系统而异,通常至少 4 字节,部分系统 8 字节 | 处理大范围整数运算 | 作为函数返回类型时返回长整数类型值 | c<br>long getLong() {<br> return 1000000L;<br>}<br> | 不同系统 long 长度可能不同,若需跨平台使用可考虑 long long | 在需要处理较大整数的场景中使用,如文件大小、时间戳等 |
19 | C | register | register 数据类型 变量名; | 建议编译器将变量存于寄存器,编译器可忽略 | 提高频繁访问变量的访问速度 | 无 | c<br>register int num = 10;<br>printf("%d\n", num);<br> | 不能对 register 变量取地址,因为它可能不在内存中 | 在需要频繁访问某个变量,且希望提高访问速度的场景中使用,如循环计数器 |
20 | C | return | return 表达式; 或 return;(函数返回类型为 void 时) | 从函数返回值并终止函数执行 | 将函数计算结果返回给调用者 | 由函数定义的返回类型决定 | c<br>int add(int a, int b) {<br> return a + b;<br>}<br> | 返回值类型必须与函数定义的返回类型一致 | 函数执行完后,将结果返回给调用者,结束函数的执行 |
21 | C | short | short 变量名; | 通常占用 2 字节内存,存储小范围整数 | 处理对内存要求高且整数范围小的情况 | 作为函数返回类型时返回短整数类型值 | c<br>short getShort() {<br> return 10;<br>}<br> | short 范围有限,使用时注意数据不要溢出 | 在对内存要求较高,且整数范围较小的场景中使用,如嵌入式系统开发 |
22 | C | signed | signed 数据类型 变量名; | 明确声明有符号类型变量,默认类型多为有符号 | 表示正数、负数和零 | 无 | c<br>signed int num = -10;<br>printf("%d\n", num);<br> | 可省略,因为多数类型默认是有符号的 | 在需要处理负数的场景中使用,明确表示变量可以为负数 |
23 | C | sizeof | sizeof(数据类型) 或 sizeof(变量名) | 编译时运算符,确定数据类型或变量占用内存字节数 | 了解数据内存占用,便于内存管理 | size_t 类型值 | c<br>int num;<br>size_t size = sizeof(num);<br>printf("Size of int: %zu bytes\n", size);<br> | sizeof 是运算符,不是函数 | 在动态内存分配、数组操作等场景中,需要了解数据类型或变量的内存大小时使用 |
24 | C | static | static 数据类型 变量名; 或 static 返回类型 函数名(参数列表); | 修饰局部变量时在静态存储区分配内存,函数结束不销毁;修饰全局变量和函数时限制作用域在当前文件 | 延长局部变量生命周期,限制全局变量和函数作用域 | 无 | c<br>void func() {<br> static int count = 0;<br> count++;<br> printf("%d\n", count);<br>}<br> | 静态变量只初始化一次 | 在函数内部需要记录状态,或者在文件内部需要限制变量和函数作用域时使用 |
25 | C | struct | struct 结构体名 { 成员列表; }; | 为结构体分配连续内存空间,成员按定义顺序存储 | 组织和管理相关数据 | 作为函数返回类型时返回结构体类型值 | c<br>struct Point {<br> int x;<br> int y;<br>};<br>struct Point getPoint() {<br> struct Point p = {1, 2};<br> return p;<br>}<br> | 结构体成员访问使用 . 运算符,指针访问使用 -> 运算符 | 将相关的数据组织在一起,形成一个整体,如表示一个人的信息(姓名、年龄、性别等) |
26 | C | switch | switch (表达式) { case 常量表达式: 语句; ... default: 语句; } | 计算表达式值,与 case 常量表达式比较,匹配则执行对应语句 | 提供多分支选择结构 | 无 | 见 case 示例 | switch 表达式只能是整数类型或枚举类型 | 根据一个变量的不同取值执行不同的代码块,当分支较多时,使用 switch 比 if - else 更清晰 |
27 | C | typedef | typedef 原数据类型 新类型名; | 为已有数据类型定义新名称,不创建新类型 | 提高代码可读性和可维护性 | 无 | c<br>typedef int Integer;<br>Integer add(Integer a, Integer b) {<br> return a + b;<br>}<br> | 新类型名遵循标识符命名规则 | 为复杂的数据类型定义一个简洁的别名,提高代码的可读性和可维护性 |
28 | C | union | union 共用体名 { 成员列表; }; | 所有成员共享同一块内存空间,大小取决于最大成员 | 不同时间使用不同类型数据,节省内存 | 作为函数返回类型时返回共用体类型值 | c<br>union Data {<br> int i;<br> float f;<br>};<br>union Data getData() {<br> union Data d;<br> d.i = 10;<br> return d;<br>}<br> | 同一时间只能使用共用体的一个成员,修改一个成员会影响其他成员 | 在需要节省内存,且不同类型的数据不会同时使用的场景中使用,如网络协议解析 |
29 | C | unsigned | unsigned 数据类型 变量名; | 声明无符号类型变量,只能表示非负数 | 扩大只处理非负数时变量的取值范围 | 无 | c<br>unsigned int num = 10;<br>printf("%u\n", num);<br> | 无符号类型不能表示负数,进行算术运算时需注意 | 在只需要处理非负数的场景中使用,如数组索引、计数器等 |
30 | C | void | void 函数名(参数列表); 或 void* 指针名; | 作为函数返回类型表示不返回值;作为参数列表表示不接受参数;作为指针类型表示通用指针 | 表示无返回值、无参数或通用指针 | 无 | c<br>void printMessage() {<br> printf("Hello, World!\n");<br>}<br> | void 指针不能直接解引用,需转换为具体类型 | 在函数不需要返回值,或者函数不接受参数的场景中使用;void* 指针可用于实现通用的数据结构 |
31 | C | volatile | volatile 数据类型 变量名; | 告诉编译器变量值可能被程序无法控制的方式改变,每次访问从内存读取 | 确保访问变量时获取最新值,避免编译器优化错误 | 无 | c<br>volatile int sensorValue;<br>// 假设传感器会更新 sensorValue 的值<br>printf("%d\n", sensorValue);<br> | 常用于硬件寄存器访问等场景 | 在访问可能被硬件、中断服务程序等外部因素修改的变量时使用,确保每次读取的是最新值 |
32 | C++ | alignas | alignas(对齐字节数) 数据类型 变量名; | 指定变量或类型的对齐方式,使数据存储起始地址为特定值倍数 | 优化内存布局,提高内存访问速度 | 无 | cpp<br>struct alignas(16) MyStruct {<br> int a;<br> int b;<br>};<br> | 对齐字节数必须是 2 的幂次方 | 在对内存访问性能要求较高的场景中使用,如高性能计算、图形处理等 |
33 | C++ | alignof | alignof(数据类型) | 获取变量或类型的对齐要求,返回 std::size_t 类型值 | 了解数据对齐要求,便于手动管理内存 | std::size_t 类型值 | cpp<br>struct MyStruct {<br> int a;<br> int b;<br>};<br>std::cout << "Alignment of MyStruct: " << alignof(MyStruct) << std::endl;<br> | 用于获取类型的对齐信息,帮助进行内存管理 | 在手动进行内存分配和管理时,需要了解数据类型的对齐要求 |
34 | C++ | asm | asm (汇编代码); | 在 C++ 代码中嵌入汇编语言代码 | 实现高性能或特定硬件相关操作 | 无 | cpp<br>#include <iostream><br>int main() {<br> int a = 10;<br> int b = 20;<br> int result;<br> asm (<br> "addl %%ebx, %%eax"<br> : "=a" (result)<br> : "a" (a), "b" (b)<br> );<br> std::cout << "Result: " << result << std::endl;<br> return 0;<br>}<br> | 汇编代码与具体平台相关,可移植性差 | 在需要实现高性能的计算、与硬件底层交互等场景中使用 |
35 | C++ | bool | bool 变量名; | 占用 1 字节内存,值为 true 或 false | 表示逻辑真和假,用于条件判断和逻辑运算 | 作为函数返回类型时返回布尔类型值 | cpp<br>bool isEven(int num) {<br> return num % 2 == 0;<br>}<br> | 布尔类型可隐式转换为整数,true 为 1,false 为 0 | 在逻辑判断、条件控制等场景中使用,如判断一个数是否为偶数、判断文件是否打开成功等 |
36 | C++ | catch | catch (异常类型 异常变量名) { 语句块; } | 捕获和处理异常,根据异常类型匹配 catch 块 | 实现异常处理机制,提高程序健壮性 | 无 | cpp<br>#include <iostream><br>void divide(int a, int b) {<br> if (b == 0) {<br> throw std::runtime_error("Division by zero");<br> }<br> std::cout << "Result: " << a / b << std::endl;<br>}<br>int main() {<br> try {<br> divide(10, 0);<br> } catch (const std::runtime_error& e) {<br> std::cout << "Exception caught: " << e.what() << std::endl;<br> }<br> return 0;<br>}<br> | catch 块按顺序匹配,异常对象生命周期在 catch 块内 | 在程序中可能出现异常的地方,捕获并处理异常,避免程序崩溃 |
37 | C++ | class | class 类名 { 成员列表; }; | 将数据和操作函数封装,编译器生成包含成员信息的结构体 | 实现数据封装、继承和多态 | 无 | cpp<br>class Rectangle {<br>private:<br> int length;<br> int width;<br>public:<br> Rectangle(int l, int w) : length(l), width(w) {}<br> int area() {<br> return length * width;<br> }<br>};<br> | 类的成员默认是 private 访问权限 | 在面向对象编程中,将数据和操作封装在一起,实现代码的复用和可维护性 |
38 | C++ | constexpr | constexpr 返回类型 函数名(参数列表) { 函数体; } 或 constexpr 数据类型 变量名 = 表达式; | 声明常量表达式,编译时计算结果 | 编译时计算,减少运行时开销 | 作为函数返回类型时返回常量表达式 | cpp<br>constexpr int factorial(int n) {<br> return (n <= 1) ? 1 : n * factorial(n - 1);<br>}<br> | 函数体必须足够简单,能在编译时计算结果 | 在需要在编译时进行计算的场景中使用,如数组大小的确定、模板参数的计算等 |
39 | C++ | const_cast | const_cast<目标类型>(表达式); | 去除或添加指针或引用的 const 限定符 | 修改 const 对象属性,不改变类型 | 去除或添加 const 限定符的指针或引用 | cpp<br>const int num = 10;<br>int* nonConstPtr = const_cast<int*>(&num);<br>// *nonConstPtr = 20; // 未定义行为<br> | 修改 const 对象可能导致未定义行为,需谨慎使用 | 在某些特殊情况下,需要修改 const 对象的属性时使用 |
40 | C++ | decltype | decltype(表达式) 变量名; | 编译时推导表达式的类型 | 泛型和模板元编程中自动推导类型 | 无 | cpp<br>int a = 10;<br>decltype(a) b = 20;<br> | 根据表达式推导类型,可用于模板编程 | 在模板编程中,需要根据表达式的类型来定义变量或函数返回类型时使用 |
41 | C++ | delete | delete 指针名; 或 delete[] 指针名; | 释放 new 分配的内存 | 管理动态分配的内存 | 无 | cpp<br>int* ptr = new int(10);<br>delete ptr;<br> | delete 用于释放单个对象内存,delete[] 用于释放数组内存,不能重复释放 | 在使用 new 动态分配内存后,需要释放内存时使用,防止内存泄漏 |
42 | C++ | dynamic_cast | dynamic_cast<目标类型>(表达式); | 在继承体系中进行安全的向下转型,运行时检查类型 | 安全地将基类指针或引用转换为派生类指针或引用 | 目标类型的指针或引用 | cpp<br>class Base { virtual void func() {} };<br>class Derived : public Base {};<br>Base* basePtr = new Derived();<br>Derived* derivedPtr = dynamic_cast<Derived*>(basePtr);<br> | 基类必须有虚函数,否则不能使用 dynamic_cast | 在继承体系中,需要将基类指针或引用转换为派生类指针或引用时使用,确保类型转换的安全性 |
43 | C++ | explicit | explicit 构造函数名(参数列表); | 防止构造函数进行隐式类型转换 | 避免意外的隐式类型转换 | 无 | cpp<br>class MyClass {<br>public:<br> explicit MyClass(int num) : data(num) {}<br>private:<br> int data;<br>};<br>// MyClass obj = 10; // 编译错误<br>MyClass obj(10);<br> | 用于单参数构造函数,防止隐式转换 | 在单参数构造函数中,不希望发生隐式类型转换时使用 |
44 | C++ | friend | friend 返回类型 函数名(参数列表); 或 friend class 类名; | 允许非成员函数或其他类访问类的私有和保护成员 | 提供特定的访问权限 | 无 | cpp<br>class MyClass {<br>private:<br> int data;<br> friend void printData(MyClass obj);<br>};<br>void printData(MyClass obj) {<br> std::cout << obj.data << std::endl;<br>}<br> | 破坏了类的封装性,应谨慎使用 | 在某些情况下,需要让非成员函数或其他类访问类的私有和保护成员时使用 |
45 | C++ | inline | inline 返回类型 函数名(参数列表) { 函数体; } | 建议编译器将函数代码直接嵌入调用处,减少函数调用开销 | 提高函数调用效率 | 由函数定义的返回类型决定 | cpp<br>inline int add(int a, int b) {<br> return a + b;<br>}<br> | 只是建议编译器内联,编译器可忽略 | 在函数体较小,且被频繁调用的场景中使用,提高程序的性能 |
46 | C++ | mutable | mutable 数据类型 成员变量名; | 允许在 const 成员函数中修改成员变量 | 在 const 对象中允许部分成员可修改 | 无 | cpp<br>class MyClass {<br>private:<br> mutable int count;<br>public:<br> void increment() const {<br> count++;<br> }<br>};<br> | 只能用于类的非静态成员变量 | 在 const 成员函数中,需要修改某些成员变量时使用 |
47 | C++ | namespace | namespace 命名空间名 { 成员列表; } | 定义命名空间,避免命名冲突 | 组织代码,避免全局命名冲突 | 无 | cpp<br>namespace MyNamespace {<br> int num = 10;<br>}<br>using namespace MyNamespace;<br>std::cout << num << std::endl;<br> | 可嵌套定义,使用 using 引入命名空间成员 | 在大型项目中,为了避免命名冲突,将相关的类、函数、变量等组织在不同的命名空间中 |
48 | C++ | new | 数据类型* 指针名 = new 数据类型; 或 数据类型* 指针名 = new 数据类型[数组大小]; | 动态分配内存并返回指向该内存的指针 | 动态管理内存 | 指向分配内存的指针 | cpp<br>int* ptr = new int(10);<br> | 使用 new 分配的内存必须使用 delete 释放,防止内存泄漏 | 在程序运行时需要动态分配内存的场景中使用,如创建对象、数组等 |
49 | C++ | noexcept | 返回类型 函数名(参数列表) noexcept; | 声明函数不会抛出异常 | 提高代码性能和可维护性 | 由函数定义的返回类型决定 | cpp<br>void func() noexcept {<br> // 不会抛出异常的代码<br>}<br> | 若函数声明 noexcept 但实际抛出异常,程序会调用 std::terminate | 在确保函数不会抛出异常的场景中使用,提高程序的性能和可维护性 |
50 | C++ | nullptr | 数据类型* 指针名 = nullptr; | 表示空指针,是一个类型安全的空指针常量 | 替代传统的 NULL,避免二义性 | 无 | cpp<br>int* ptr = nullptr;<br> | nullptr 是 C++11 引入的,用于替代 NULL | 在初始化指针时,使用 nullptr 明确表示指针为空,避免潜在的错误 |
51 | C++ | operator | 返回类型 operator 运算符(参数列表) { 函数体; } | 重载运算符,使自定义类型支持运算符操作 | 为自定义类型提供运算符功能 | 由函数定义的返回类型决定 | cpp<br>class MyClass {<br>public:<br> MyClass operator+(const MyClass& other) {<br> // 实现加法逻辑<br> }<br>};<br> | 部分运算符不能重载,如 .、::、?: 等 | 在自定义类型中,需要支持某些运算符操作时使用,如自定义复数类的加法、减法等 |
52 | C++ | private | 在类定义中使用,如 private: 成员列表; | 限制成员只能在类内部访问 | 实现数据封装,保护类的私有成员 | 无 | 见 class 示例 | 类的成员默认是 private 访问权限 | 在类中,需要保护某些成员不被外部访问时使用,实现数据的封装和隐藏 |
53 | C++ | protected | 在类定义中使用,如 protected: 成员列表; | 限制成员可在类内部和派生类中访问 | 实现数据封装,同时为派生类提供访问权限 | 无 | cpp<br>class Base {<br>protected:<br> int data;<br>};<br>class Derived : public Base {<br>public:<br> void accessData() {<br> data = 10; // 可访问<br> }<br>};<br> | 派生类可访问基类的 protected 成员 | 在类中,需要让派生类能够访问某些成员,但又不希望外部直接访问时使用 |
54 | C++ | public | 在类定义中使用,如 public: 成员列表; | 成员可在任何地方访问 | 提供类的公共接口 | 无 | 见 class 示例 | 公共成员可被外部代码直接访问 | 在类中,需要提供给外部使用的接口和功能时使用 |
55 | C++ | reinterpret_cast | reinterpret_cast<目标类型>(表达式); | 进行任意类型的指针或引用之间的转换,不进行类型检查 | 实现底层的类型转换 | 目标类型的指针或引用 | cpp<br>int num = 10;<br>int* ptr = #<br>char* charPtr = reinterpret_cast<char*>(ptr);<br> | 转换很危险,可能导致未定义行为,需谨慎使用 | 在某些底层编程场景中,需要进行不同类型指针或引用的转换时使用 |
56 | C++ | static_cast | static_cast<目标类型>(表达式); | 进行基本类型转换、父子类指针或引用转换等 | 实现常见的类型转换 | 目标类型的值 | cpp<br>int num = 10;<br>double d = static_cast<double>(num);<br> | 在有继承关系的指针或引用转换时,不进行运行时类型检查 | 在进行基本类型转换、父子类指针或引用转换等常见类型转换时使用 |
57 | C++ | template | template <模板参数列表> 返回类型 函数名(参数列表) { 函数体; } 或 template <模板参数列表> class 类名 { 成员列表; }; | 定义函数模板或类模板,实现泛型编程 | 编写与具体数据类型无关的代码 | 由函数或类的定义决定 | cpp<br>template <typename T><br>T max(T a, T b) {<br> return (a > b) ? a : b;<br>}<br> | 模板代码在编译时实例化 | 在编写通用的算法、数据结构等代码时使用,提高代码的复用性 |
58 | C++ | this | 在类的成员函数中使用 | 指向当前对象的指针 | 在成员函数中引用当前对象 | 指向当前对象的指针 | cpp<br>class MyClass {<br>private:<br> int data;<br>public:<br> void setData(int value) {<br> this->data = value;<br> }<br>};<br> | this 指针是隐式参数,不能修改 | 在类的成员函数中,需要引用当前对象的成员时使用 |
59 | C++ | thread_local | thread_local 数据类型 变量名; | 声明线程局部存储的变量,每个线程有独立副本 | 为每个线程提供独立的变量副本 | 无 | cpp<br>#include <iostream><br>#include <thread><br>thread_local int num = 0;<br>void func() {<br> num++;<br> std::cout << "Thread: " << std::this_thread::get_id() << ", num: " << num << std::endl;<br>}<br>int main() {<br> std::thread t1(func);<br> std::thread t2(func);<br> t1.join();<br> t2.join();<br> return 0;<br>}<br> | thread_local 变量生命周期与线程相同 | 在多线程编程中,每个线程需要独立的变量副本时使用 |
60 | C++ | throw | throw 异常对象; | 抛出异常,程序跳转到匹配的 catch 块 | 触发异常处理机制 | 无 | 见 catch 示例 | 抛出的异常对象必须能被某个 catch 块捕获 | 在程序中遇到错误或异常情况时,抛出异常,通知调用者进行处理 |
61 | C++ | try | try { 语句块; } catch (异常类型 异常变量名) { 语句块; } | 包含可能抛出异常的代码块,配合 catch 捕获异常 | 实现异常处理 | 无 | 见 catch 示例 | try 块后必须至少有一个 catch 块 | 在程序中可能出现异常的地方,使用 try - catch 块捕获并处理异常 |
62 | C++ | typeid | typeid(表达式) | 返回一个 std::type_info 对象,包含表达式的类型信息 | 在运行时获取类型信息 | std::type_info 对象引用 | cpp<br>#include <iostream><br>#include <typeinfo><br>int main() {<br> int num = 10;<br> std::cout << typeid(num).name() << std::endl;<br> return 0;<br>}<br> | 基类必须有虚函数,才能使用 typeid 进行运行时类型识别 | 在需要在运行时获取对象的类型信息时使用,如类型检查、类型转换等 |
相关文章:
《解码 C/C++ 关键字:科技编程的核心指令集》
序号语言关键字原型实现原理功能返回值类型使用示例注意事项应用场景1Cautoauto 数据类型 变量名;函数调用时在栈上分配内存,函数结束自动释放声明自动变量,变量生命周期限于函数执行期间无c<br>void func() {<br> auto int num 10;<br&…...
Linux 性能调优之CPU调优认知
写在前面 博文内容为《性能之巅 系统、企业与云可观测性(第2版)》CPU 章节课后习题答案整理内容涉及: CPU 术语,指标认知CPU 性能问题分析解决CPU 资源负载特征分析应用程序用户态CPU用量分析理解不足小伙伴帮忙指正对每个人而言,真正的职责只有一个:找到自我。然后在心中…...
《P2660 zzc 种田》
题目背景 可能以后 zzc 就去种田了。 题目描述 田地是一个巨大的矩形,然而 zzc 每次只能种一个正方形,而每种一个正方形时 zzc 所花的体力值是正方形的周长,种过的田不可以再种,zzc 很懒还要节约体力去泡妹子,想花最少的体力值…...
Model Context Protocol(MCP)介绍
“Model Context Protocol(MCP)”是近年来在多模态大模型或可扩展智能系统中出现的一个概念,其主要目标是为大模型提供结构化的上下文管理和动态记忆机制。它解决的是在长时间对话、多轮交互、任务切换等复杂情境中,模型如何理解“…...
解决使用PendingIntent.getBroadcast时出现java.lang.IllegalArgumentException异常的问题
当app为targetSdk31及以上,并且在Android12及以上系统中调用PendingIntent.getBroadcast(context, 0, intent, 0)接口时会抛出异常: java.lang.IllegalArgumentException: com.haier.uhome.uplus.seasia: Targeting S (version 31 and above) requires …...
创建一个简单的HTML游戏站
创建一个简单的HTML游戏站涉及多个步骤,包括规划网站结构、设计用户界面、编写游戏逻辑以及测试和部署。下面是一个详细的步骤指南: 1. 规划网站结构 确定目标受众:了解你的目标用户群体。选择游戏类型:决定你要开发的游戏类型&…...
AIDD-人工智能药物设计-TCMP-12个公开的中药数据库
12个公开的中药数据库 数据库是中药网络药理学研究不可或缺的数据来源之一。目前已经建立了若干中药数据库,提供有关中药的各方面信息,包括疾病、方剂、草药或天然产物、生物活性成分和靶点。这些数据库成为中医药与现代生物医学之间的桥梁,…...
基于大模型的阵发性室上性心动过速风险预测与治疗方案研究
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与目标 1.3 研究方法与数据来源 二、阵发性室上性心动过速概述 2.1 定义与分类 2.2 发病机制与流行病学 2.3 临床表现与诊断方法 三、大模型在阵发性室上性心动过速预测中的应用 3.1 大模型技术原理与特点 3.2 模型构…...
基于金字塔视觉变换的类引导网络高分辨率遥感图像高效语义分割
Class-Guidance Network Based on the Pyramid Vision Transformer for Efficient Semantic Segmentation of High-Resolution Remote Sensing Images 摘要 多分类语义分割中类之间的小差异和类内的大变化是全卷积神经网络的“编码器-解码器”结构没有完全解决的问题&#…...
高级:数据库面试题全攻略
一、引言 数据库是软件开发中不可或缺的组件,面试官通过相关问题,考察候选人对数据库核心概念的理解、实际应用能力以及在复杂场景下的问题解决能力。本文将深入解读数据库的索引、事务、锁机制等常见面试问题,结合实际开发场景,…...
如何避免Python爬虫重复抓取相同页面?
在网络爬虫开发过程中,重复抓取相同页面是一个常见但必须解决的问题。重复抓取不仅会浪费网络带宽和计算资源,降低爬虫效率,还可能导致目标网站服务器过载,甚至触发反爬机制。本文将深入探讨Python爬虫中避免重复抓取的多种技术方…...
LeetCode.02.04.分割链表
分割链表 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你不需要 保留 每个分区中各节点的初始相对位置。 示例 1: 输入:head [1,4,3,2,5,2], x …...
鸿蒙开发_ARKTS快速入门_语法说明_渲染控制---纯血鸿蒙HarmonyOS5.0工作笔记012
然后我们再来看渲染控制 首先看条件渲染,其实就是根据不同的状态,渲染不同的UI界面 比如下面这个暂停 开启播放的 可以看到就是通过if 这种条件语句 修改状态变量的值 然后我们再来看这个, 下面点击哪个,上面横线就让让他显示哪个 去看一下代码 可以看到,有两个状态变量opt…...
MOP数据库中的EXPLAIN用法
EXPLAIN 是 SQL 中的一个非常有用的工具,主要用于分析查询语句的执行计划。执行计划能展示数据库在执行查询时的具体操作步骤,像表的读取顺序、使用的索引情况、数据的访问方式等,这有助于我们对查询性能进行优化。 语法 不同的数据库系统&…...
软考 系统架构设计师系列知识点 —— 设计模式之抽象工厂模式
本文内容参考: 软考 系统架构设计师系列知识点之设计模式(2)_系统架构设计师中考设计模式吗-CSDN博客 https://baike.baidu.com/item/%E6%8A%BD%E8%B1%A1%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F/2361182 特此致谢! Abstract Fac…...
告别水下模糊!SU-YOLO:轻量化+尖峰神经网络,用“类脑计算”实现水下目标毫秒级识别
目录 一、摘要 二、引言 三、相关工作 SNN 物体检测 水下物体探测 水下图像去噪 归一化 四、方法 水下尖峰YOLO 尖峰干扰器 SU-Block SpikeSPP 编码器和检测头 分批归一化 五、Coovally AI模型训练与应用平台 六、实验结果 数据集和实施细节 数据集 实施细节…...
Three.js 系列专题 8:实战项目 - 构建一个小型 3D 游戏
内容概述 本专题将通过一个实战项目展示 Three.js 的综合应用。游戏包含迷宫生成、角色移动、相机控制和简单的物理碰撞检测(可选)。这将帮助你将之前学到的知识融会贯通。 学习目标 整合几何体、光照、动画和交互知识。实现基本的游戏逻辑和用户控制。可选:使用 Cannon.j…...
嵌入式笔试(一)
C语言和嵌入式软件 面试题(共10题 时间30分钟) 1. 请写出下面声明的含义。 int(*s[10])(int);定义了一个数组为s包含十个元素,每个元素都是函数指针,函数的参数为一个int类型,返回值也是int类型2. 选择题 设有一台计算机,它有一条加法指令,每次可计算三个数的和。如果要…...
spark 的流量统计案例
创建一个目录为data...
局域网访问 Redis 方法
局域网访问 Redis 方法 默认情况下,Redis 只允许本机 (127.0.0.1) 访问。如果你想让局域网中的其他设备访问 Redis,需要 修改 Redis 配置,并确保 防火墙放行端口。 方法 1:修改 Redis 配置 1. 修改 redis.conf(或 me…...
LeetCode题五:合并两个有序链表
基本思路其实就是:先建立一个空链表,然后将尾节点放在头结点上; 如果第一个链表节点值较小,那么先将list1插入新链表中,然后将尾节点后移;相同的,第二个也需要比较;移动新链表的指针…...
深入探索 `malloc`:内存分配失败的原因及正确使用规范
文章目录 一、malloc 内存分配失败的常见原因1. 内存不足2. 内存越界访问3. 内存碎片化4. 系统限制5. 错误的使用方式 二、如何正确使用 malloc1. 检查返回值2. 释放内存3. 避免内存越界4. 优化内存使用5. 调整系统参数6. 使用高效的内存分配器 三、总结 在 C 语言中࿰…...
处理Excel的python库openpyxl、xlrd、xlwt、panda区别
openpyxl、xlrd、xlwt、pandas 都能处理 Excel 表格,但用途和适合的场景不同。今天做个总结: 库名功能支持格式读写支持样式备注openpyxl全面的.xlsx处理库.xlsx(Excel2007)✅✅✅首选xlrd读取.xls文件的老牌工具.xls(…...
【C++11】特殊类的设计 单例模式 类型转换
目录 一、特殊类的设计: 1、设计一个不能够拷贝的类: 2、设计一个只能在堆上创建的类 3、设计一个只能在栈上创建的类 4、设计一个不能被继承的类: 二、单例模式: 设计一个只能创建一个对象的类: 饿汉模式&…...
基于vue框架的助农特色农产品销售系统i7957(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
系统程序文件列表 项目功能:用户,商品分类,农产品信息,特价商品,爱心捐赠 开题报告内容 基于Vue框架的助农特色农产品销售系统开题报告 一、研究背景与意义 (一)研究背景 随着乡村振兴战略的深入实施,特色农产品作为农村经济的重要组成部…...
Linux 学习笔记(3):ls 命令深入剖析与实践应用(期末、期中复习必备)
前言 一、ls 命令基础语法 命令示例 二、工作目录与 HOME 目录 1.工作目录 2.HOME 目录 三、结语 前言 在 Linux 系统的学习旅程中,基础命令的掌握是迈向熟练操作的关键一步。其中,ls 命令作为我们探索系统文件和目录结构的常用工具,有着…...
最简CNN based RNN源码
1.源码: GitCode - 全球开发者的开源社区,开源代码托管平台 最终的效果: 数据集是20个周期,1024点sin(x)加了偏置。其中用于训练的有1024-300点。最后300点用来进行测试。上面的右侧输出的,其实对应左侧x73之后的波形࿰…...
大模型是如何把向量解码成文字输出的
hidden state 向量 当我们把一句话输入模型后,例如 “Hello world”: token IDs: [15496, 995]经过 Embedding Transformer 层后,会得到每个 token 的中间表示,形状为: hidden_states: (batch_size, seq_len, hidd…...
Elasticsearch:加快 HNSW 图的合并速度
作者:来自 Elastic Thomas Veasey 及 Mayya Sharipova 过去,我们曾讨论过搜索多个 HNSW 图时所面临的一些挑战,以及我们是如何缓解这些问题的。当时,我们也提到了一些计划中的改进措施。本文正是这项工作的成果汇总。 你可能会问…...
Elasticsearch单节点安装手册
Elasticsearch单节点安装手册 以下是一份 Elasticsearch 单节点搭建手册,适用于 Linux 系统(如 CentOS/Ubuntu),供学习和测试环境使用。 Elasticsearch 单节点搭建手册 1. 系统要求 操作系统:Linux(Cent…...
前端用户列表与后端分页协同设计
分页实现方案 在现代Web应用中,用户列表展示与分页是一个常见的功能需求。前端与后端通过API协同工作,使用PageHelper等工具实现高效分页。 例如: 后端实现 (使用PageHelper) public PageResult DishPage(DishPageQueryDTO dishPageQuery…...
MyBatis的第四天学习笔记下
10.MyBatis参数处理 10.1 项目信息 模块名:mybatis-007-param数据库表:t_student表结构: id: 主键name: 姓名age: 年龄height: 身高sex: 性别birth: 出生日期 sql文件: create table t_student ( id bigint auto_increm…...
三类人解决困境的方法
有一个视频讲述了三类人解决困境的方法,视频中有持续流出干净水源的水龙头,一杯装满脏水的玻璃杯。第一类普通人是拿着玻璃杯放到水龙头下不断接水,水龙头一直开着的第二类高手是把脏水倒到水池里,然后打开水龙头接水,…...
蓝桥杯第十一届省赛C++B组真题解析
蓝桥杯第十一届省赛CB组真题解析 八、回文日期https://www.lanqiao.cn/problems/348/learning 方法一:暴力枚举所有的日期,记录有多少个回文日期。 #include <bits/stdc.h> using namespace std; int month[13]{0,31,28,31,30,31,30,31,31,30,31…...
Tailscale 的工作原理*
Tailscale 的核心原理基于 WireGuard VPN,它实现了端到端加密的 点对点(P2P)连接,但在必要时会通过 中继服务器(DERP) 进行中转。整体来说,它是一个 零配置的 Mesh VPN,让所有设备看…...
PyTorch张量范数计算终极指南:从基础到高阶实战
在深度学习领域,张量范数计算是模型正则化、梯度裁剪、特征归一化的核心技术。本文将以20代码实例,深度剖析torch.norm的9大核心用法,并揭示其在Transformer模型中的关键应用场景。 🚀 快速入门(5分钟掌握核心操作&…...
Innovus DRC Violation和Calibre DRC Violation分析和修复案例
今天把小编昨天帮助社区训练营学员远程协助的一个经典案例分享给大家。希望能够帮助到更多需要帮助的人。如果各位想跟小编来系统学习数字后端设计实现的,可以联系小编。 数字IC后端手把手实战教程 | Innovus verify_drc VIA1 DRC Violation解析及脚本自动化修复方…...
数据库7(数据定义语句,视图,索引)
1.数据定义语句 SQL数据定义语言(DDL)用于定义和管理数据库结构,包括创建、修改和删除 数据库对象。常见的DDL语句包括CREATE、DROP和ALTER。 它的操作的是对象,区分操作数据的语句:INSERT,DELETE,UPDATE 示例&#x…...
Cadence 修改 铜和pin脚 连接属性 和 光绘参数修改
光绘层叠设置,参考 光绘参数修改, 中英文对照...
秒杀业务的实现过程
一.后台创建秒杀的活动场次信息,并关联到要秒杀的商品或服务; 二.通过定时任务,将秒杀的活动信息和商品服务信息存储到redis; 三.在商品展示页的显眼位置加载秒杀活动信息; 四.用户参与秒杀,创建订单,将…...
✅ Ultralytics YOLO 训练(Train)时实时获取 COCO 指标(AP):2025最新配置与代码详解 (小白友好 + B站视频)
✅ YOLO获取COCO指标(4): 训练(Train)启用COCO API评估(实时监控AP指标)| 发论文必看! | Ultralytics | 小白友好 文章目录 一、问题定位二、原理分析三、解决方案与实践案例步骤 1: 在 model.train() 调用中设置 save_jsonTrue步骤 2: 修改 …...
java基础 流(Stream)
Stream Stream 的核心概念核心特点 Stream 的操作分类中间操作(Intermediate Operations)终止操作(Terminal Operations) Stream 的流分类顺序流(Sequential Stream)并行流(Parallel Stream&…...
基于springboot+vue的课程管理系统
一、系统架构 前端:vue | element-ui 后端:springboot | mybatis-plus 环境:jdk1.8 | mysql8 | maven | node v16.20.2 | idea 二、代码及数据 三、功能介绍 01. 登录 02. 管理员-首页 03. 管理员-系管理 04. 管理员-专业管理 05. 管…...
android14 keycode 上报 0 解决办法
驱动改完后发现上报了keycode=0 04-07 13:02:33.201 2323 2662 D WindowManager: interceptKeyTq keycode=0 interactive=false keyguardActive=true policyFlags=2000000 04-07 13:02:33.458 2323 2662 D WindowManager: interceptKeyTq keycode=0 interactive=false key…...
小说现代修仙理论
修仙理论 灵魂感应与感知强化:通过特定的修炼方法,感应自身灵魂,以此提升感知能力,使修炼者对周围环境及自身状态的察觉更为敏锐。 生物电的感知与运用 生物电感知:修炼者需凝神静气,感知体内生物…...
6.综合练习1-创建文件
题目: 分析: 本例中使用mkdirs方法创建aaa文件夹。 题目要求是"在当前模块下的aaa文件夹",此时在左侧的目录中,是没有aaa文件夹的,所以要先创建a.txt文件的父级路径aaa文件夹,由于是在当前模块下…...
PostgreSQL的内存管理机制
目录 V1.0PostgreSQL的内存管理机制文件系统缓存作为二级缓存内存切换机制性能影响总结 V2.0PostgreSQL 内存管理机制:双缓存体系验证与笔记完善1. 现有描述验证2. 完善后的内存管理笔记2.1 双缓存体系2.2 其他关键内存区域2.3 验证方法 3. 注意事项 V1.0 PostgreS…...
ReplicaSet、Deployment功能是怎么实现的?
在Kubernetes中,ReplicaSet 和 Deployment 是用于管理 Pod 副本的关键对象。它们各自的功能和实现机制如下: 1. ReplicaSet 功能 管理 Pod 副本:确保指定数量的 Pod 副本一直在运行。如果有 Pod 副本崩溃或被删除,ReplicaSet 会…...
544 eff.c:1761处loop vect 分析
2.6 带有mask的向量数学函数 gcc 支持的svml向量数学函数 32652 GCC currently emits calls to code{vmldExp2}, 32653 code{vmldLn2}, code{vmldLog102}, code{vmldPow2}, 32654 code{vmldTanh2}, code{vmldTan2}, code{vmldAtan2}, code{vmldAtanh2}, 32655 code{vmldCbrt2}…...
搜狗拼音输入法纯净优化版:去广告,更流畅输入体验15.2.0.1758
前言 搜狗输入法电脑版无疑是装机必备的神器。它打字精准,词库丰富全面,功能强大,极大地提升了输入效率。最新版的搜狗拼音输入法更是借助AI技术,让打字变得既准确又高效。而搜狗输入法的去广告精简优化版,通过移除广…...