01.C++基础语法

简介: 本教程系统讲解C++基础语法,涵盖语言特性、编译器使用、命名空间、头文件、修饰符与关键字等核心内容,助你快速掌握C++编程基础。

01.基础语法

目录介绍

  • 1.1 C++快速介绍
    • 1.1.1 C++语言介绍
    • 1.1.2 C++的特点
    • 1.1.3 C++标准库
    • 1.1.4 C++应用领域
    • 1.1.5 C++的版本
  • 1.2 C++编译器
    • 1.2.1 编译器是什么
    • 1.2.2 GCC编译器
    • 1.2.3 Clang编译器
    • 1.2.4 MSVC编译器
    • 1.2.5 IDE开发环境
    • 1.2.6 在线编译器
  • 1.3 helloWorld
    • 1.3.1 第一个案例
    • 1.3.2 编译代码
    • 1.3.3 代码解读
  • 1.4 编译C++
    • 1.4.0 最简单编译
    • 1.4.1 编译单个文件
    • 1.4.2 编译多个文件
    • 1.4.3 指定C++标准
    • 1.4.4 启用优化
    • 1.4.5 生成调试信息
  • 1.5 多种注释使用
    • 1.5.1 单行注释
    • 1.5.2 多行注释
    • 1.5.3 文档注释工具
  • 1.6 命名空间
    • 1.6.1 命名空间概念
    • 1.6.2 定义命名空间
    • 1.6.3 访问命名空间成员
    • 1.6.4 嵌套命名空间
    • 1.6.5 匿名命名空间
    • 1.6.6 命名空间别名
    • 1.6.7 标准命名空间
    • 1.6.8 综合练习题
  • 1.7 头文件
    • 1.7.1 头文件扩展名
    • 1.7.2 头文件和实现类
    • 1.7.3 头文件保护
    • 1.7.4 模板类头文件
  • 1.8 修饰符和标志符
    • 1.8.1 访问控制修饰符
    • 1.8.2 存储类型修饰符
    • 1.8.3 类型限定符
    • 1.8.4 函数修饰符
    • 1.8.5 类修饰符
    • 1.8.6 其他修饰符
    • 1.8.7 标志符
  • 1.9 关键字
    • 1.9.1 数据类型关键字
    • 1.9.2 存储类型关键字
    • 1.9.3 控制语句关键字
    • 1.9.4 类和对象关键字
    • 1.9.5 异常处理关键字
    • 1.9.6 类型转换关键字
    • 1.9.7 操作符相关关键字
    • 1.9.8 模板相关关键字
    • 1.9.9 命名空间相关关键字
    • 1.9.10 其他关键字

1.1 C++快速介绍

1.1.1 C++语言介绍

C++ 是一种通用的、高效的编程语言,广泛应用于系统编程、游戏开发、嵌入式系统、高性能计算等领域。

它是 C 语言 的扩展,同时支持面向过程编程和面向对象编程(OOP)。事实上,任何合法的 C 程序都是合法的 C++ 程序。

C++ 由 Bjarne Stroustrup 于 1980 年代初期在贝尔实验室开发,最初被称为“C with Classes”。

注意:使用静态类型的编程语言是在编译时执行类型检查,而不是在运行时执行类型检查。

1.1.2 C++的特点

  1. 高效性: C++ 直接编译为机器码,运行效率高。支持底层内存操作,适合开发高性能应用。
  2. 面向对象:支持类、对象、继承、多态等面向对象特性。
  3. 泛型编程:通过模板(template)支持泛型编程,提高代码复用性。
  4. 标准库:提供了丰富的标准库(如 STL,Standard Template Library),包括容器、算法、迭代器等。
  5. 兼容 C 语言:几乎完全兼容 C 语言,可以直接使用 C 语言的库和代码。
  6. 跨平台:支持多种操作系统(如 Windows、Linux、macOS)和硬件平台。

1.1.3 C++标准库

标准的 C++ 由三个重要部分组成:

  1. 核心语言,提供了所有构件块,包括变量、数据类型和常量,等等。
  2. C++ 标准库,提供了大量的函数,用于操作文件、字符串等。
  3. 标准模板库(STL),提供了大量的方法,用于操作数据结构等。

1.1.4 C++应用领域

  • 系统编程:操作系统、设备驱动程序、嵌入式系统。
  • 游戏开发:许多游戏引擎(如 Unreal Engine)使用 C++ 开发。
  • 高性能计算:科学计算、金融分析、人工智能。
  • 图形处理:图像处理、计算机视觉。
  • 网络编程:服务器开发、网络协议实现。
  • 桌面应用:使用 Qt、MFC 等框架开发跨平台 GUI 应用。

1.1.5 C++的版本

C++ 标准不断更新,主要版本包括:

  • C++98:第一个正式标准。
  • C++11:引入现代特性,如自动类型推导、Lambda 表达式。
  • C++14C++17C++20:逐步增强语言功能和标准库。

1.2 C++编译器

1.2.1 编译器是什么

C++ 编译器 是将 C++ 源代码转换为机器代码的工具,使程序能够在计算机上运行。

1.2.2 GCC编译器

GCC(GNU Compiler Collection):GCC是一个开源的编译器套件,包括C++编译器(g++)。它是许多Linux发行版的默认编译器,也可在其他操作系统上使用。

特点:开源、跨平台(支持 Linux、Windows、macOS 等)。支持最新的 C++ 标准(如 C++20)。性能优秀,广泛应用于开源项目。

1.2.3 Clang编译器

简介:Clang 是 LLVM 项目的一部分,专注于提供快速编译和清晰的错误信息。

特点: 开源、跨平台。编译速度快,错误信息友好。支持最新的 C++ 标准。

1.2.4 MSVC编译器

  • 简介:MSVC 是微软开发的 C++ 编译器,集成在 Visual Studio 中。
  • 特点:专为 Windows 平台优化。支持最新的 C++ 标准。提供强大的调试和开发工具。
  • 安装:通过 Visual Studio 安装。
  • 使用:在 Visual Studio 中创建项目并编译。

1.2.5 IDE开发环境

IDE 集成了编译器、编辑器、调试器等工具,提供更便捷的开发体验。以下是常用的 C++ IDE:

  • Visual Studio(Windows): 强大的调试工具,支持 MSVC 编译器。
  • Code::Blocks(跨平台):轻量级,支持多种编译器。
  • CLion(跨平台):JetBrains 开发的 C++ IDE,支持 CMake。
  • Xcode(macOS):苹果官方 IDE,支持 Clang 编译器。

1.2.6 在线编译器

如果你不想安装本地编译器,可以使用在线编译器快速测试代码:

Wandboxhttps://wandbox.org/

OnlineGDB【体验好,有代码自动补充】https://www.onlinegdb.com/

1.3 helloWorld

1.3.1 第一个案例

让我们看一段简单的代码,可以输出单词 Hello World。

#include <iostream>
using namespace std;

// main() 是程序开始执行的地方 是一个单行注释。
int main() {
   
    cout << "Hello world" << endl;
    return 0;
}

1.3.2 编译代码

通常我们使用 -o 选项指定可执行程序的文件名,以下实例生成一个 hello 的可执行文件:

$ g++ main.cpp -o hello
$ ./hello
hello world

1.3.3 代码解读

C++ 语言定义了一些头文件,这些头文件包含了程序中必需的或有用的信息。上面这段程序中,包含了头文件 。

下一行 using namespace std; 告诉编译器使用 std 命名空间。命名空间是 C++ 中一个相对新的概念。

下一行 // main() 是程序开始执行的地方 是一个单行注释。单行注释以 // 开头,在行末结束。

下一行 int main() 是主函数,程序从这里开始执行。

下一行 cout << "Hello World"; 会在屏幕上显示消息 "Hello World"。

下一行 return 0; 终止 main( )函数,并向调用进程返回值 0。

1.4 编译C++

1.4.0 最简单编译

最简单的编译方式:

$ g++ main.cpp

由于命令行中未指定可执行程序的文件名,编译器采用默认的 a.out。程序可以这样来运行:

$ ./a.out
hello world

1.4.1 编译单个文件

g++ program.cpp -o program
#如果是这样,那么默认会生成a.out
g++ program.cpp
  • g++:调用 GCC 编译器。
  • program.cpp:源代码文件。
  • -o program:指定输出文件名为 program

1.4.2 编译多个文件

g++ main.cpp utils.cpp -o program
g++ Account.cpp Bank.cpp FileManager.cpp BankUserManager.cpp -o BankUserManager
  • 将多个源文件一起编译。

1.4.3 指定C++标准

g++ 有些系统默认是使用 C++98,我们可以指定使用 C++11 来编译 main.cpp 文件:

g++ -g -Wall -std=c++11 main.cpp
g++ -std=c++11 -o program program.cpp

-std=c++11:指定使用 C++11 标准。

1.4.4 启用优化

g++ -O2 -o program program.cpp

g++ -O2 中的 -O2 表示启用编译器的优化级别 2。这是 GCC/G++ 编译器提供的一组预定义的优化策略,旨在提高生成代码的执行效率。以下是详细解释:

  1. -O0 (默认级别):不进行优化;编译速度最快;生成的代码易于调试;执行速度最慢
  2. -O1:基础优化;减少代码体积和执行时间;不显著增加编译时间
  3. -O2 (推荐级别):中等强度优化;启用所有不涉及空间/时间权衡的优化;不包括循环展开和内联函数等激进优化;在程序性能和代码大小之间取得良好平衡;通常用于发布版本
  4. -O3:最高级别优化;包含循环展开、函数内联等激进优化;可能显著增加代码体积;某些情况下可能导致性能下降(缓存问题)

-O2 包含的主要优化技术:

优化技术 说明
指令调度 重新排列指令以充分利用CPU流水线
循环优化 简化循环结构,减少分支开销
死代码消除 删除永远不会执行的代码
常量传播 用已知常量值替换变量
函数内联 将小函数直接插入调用位置(有限度)
尾调用优化 重用栈帧进行递归调用
  1. 开发阶段:使用 -O0-Og(优化调试体验)
  2. 性能测试:使用 -O2
  3. 最终发布:推荐 -O2(稳定性和性能的平衡)
  4. 特殊场景:对性能要求极高的场景可尝试 -O3,但需测试稳定性
# 调试版本(无优化)
g++ -g -o program program.cpp
# 发布版本(推荐优化)
g++ -O2 -o program program.cpp
# 激进优化版本(可能风险)
g++ -O3 -o program program.cpp

注意:优化级别越高,编译时间越长,且可能增加调试难度(变量可能被优化掉)。-O2 在大多数情况下是最佳选择,能在性能提升和稳定性之间取得良好平衡。

1.4.5 生成调试信息

g++ -g -o program program.cpp

在编译程序时,使用 -g选项会生成调试信息。这些信息允许调试器(如 GDB)将机器代码与源代码关联起来,从而进行源代码级别的调试。

调试信息是什么?调试信息是嵌入在可执行文件中的额外数据,它建立了机器代码与源代码之间的映射关系,使调试器能够:

  1. 源代码映射:将汇编指令对应到源代码行号
  2. 变量跟踪:识别内存位置对应的变量名
  3. 符号表:保存函数名、类名、变量名等符号信息
  4. 数据类型:记录变量和结构体的类型信息
  5. 调用栈:支持函数调用栈的追踪

调试信息包含的关键内容

信息类型 作用 示例
行号信息 将机器指令映射到源代码行 0x401530 → main.cpp:15
符号表 函数/变量名到内存地址的映射 main() @ 0x401530
类型信息 变量类型和结构体定义 int a; struct Point {x,y};
作用域信息 变量可见范围 局部变量:函数内可见
宏定义 预处理器宏的原始定义 #define MAX_SIZE 100

调试信息如何工作

+-------------------+     +-------------------+     +-------------------+
|   源代码 (C++)     |     | 带调试信息的可执行文件 |     |      调试器       |
|                   |     |                   |     | (GDB, LLDB, IDE) |
|  int main() {     |     | 机器指令 +         |     |                   |
|    int a = 5;     |---->| 调试信息表         |---->| 显示变量值         |
|    return a;      |     | (行号、符号、类型) |     | 设置断点           |
|  }                |     |                   |     | 单步执行           |
+-------------------+     +-------------------+     +-------------------+

1.5 多种注释使用

在 C++ 中,注释 是用于解释代码的文本,编译器会忽略注释内容。注释对于提高代码的可读性和维护性非常重要,尤其是在团队协作或长期维护的项目中。

提示:编译器在编译代码时,会忽略注释的内容

1.5.1 单行注释

单行注释// 描述信息

通常放在一行代码的上方,或者一条语句的末尾,==对该行代码说明==

int main() {
   
    // 输出 Hello, World!
    cout << "Hello, World!" << endl; // 这是行尾注释
    return 0;
}

1.5.2 多行注释

多行注释/* 描述信息 */

通常放在一段代码的上方,==对该段代码做整体说明==

/*
这是一个简单的 C++ 程序
用于输出 Hello, World!
*/
int main() {
   
    cout << "Hello, World!" << endl;
    return 0;
}

1.5.3 文档注释工具

C++ 支持使用文档注释生成 API 文档,常用的工具包括:

1.6 命名空间

命名空间(Namespace) 是 C++ 中用于组织代码的机制,它可以避免命名冲突,尤其是在大型项目或使用第三方库时。命名空间将代码逻辑分组,并为其中的标识符(如变量、函数、类等)提供作用域。

1.6.1 命名空间概念

遇到问题:一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突。当所有人的代码都测试通过,没有问题时,将它们结合到一起就有可能会出现命名冲突。

场景例如:您可能会写一个名为 xyz() 的函数,在另一个可用的库中也存在一个相同的函数 xyz()。这样,编译器就无法判断您所使用的是哪一个 xyz() 函数。

解决办法:因此,引入了命名空间这个概念,可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围。

作用:防止命名冲突,将代码逻辑分组。语法

namespace 命名空间名 {
   
  // 变量、函数、类等
}

访问方式

  • 使用 命名空间名::标识符 访问命名空间中的成员。
  • 使用 using namespace 命名空间名; 引入整个命名空间。
  • 使用 using 命名空间名::标识符; 引入特定成员。

1.6.2 定义命名空间

namespace MyNamespace {
   
    int value = 42; // 变量
    void print() {
     // 函数
        cout << "Hello from MyNamespace!" << endl;
    }
}

1.6.3 访问命名空间成员

#include <iostream>
using namespace std;

int main() {
   
    cout << MyNamespace::value << endl; // 访问变量
    MyNamespace::print();               // 调用函数
    return 0;
}

使用 using namespace 可以引用整个空间

#include <iostream>
using namespace std;

namespace MyNamespace {
   
    int value = 42;
    void print() {
   
        cout << "Hello from MyNamespace!" << endl;
    }
}

using namespace MyNamespace; // 引入整个命名空间

int main() {
   
    cout << value << endl; // 直接访问变量
    print();               // 直接调用函数
    return 0;
}

使用 using 引入特定成员

#include <iostream>
using namespace std;

namespace MyNamespace {
   
    int value = 42;
    void print() {
   
        cout << "Hello from MyNamespace!" << endl;
    }
}

using MyNamespace::value; // 引入特定成员

int main() {
   
    cout << value << endl; // 直接访问变量
    MyNamespace::print();  // 仍需使用命名空间访问函数
    return 0;
}

1.6.4 嵌套命名空间

命名空间可以嵌套,形成层次结构。示例

namespace Outer {
   
    namespace Inner {
   
        void print() {
   
            cout << "Hello from Inner namespace!" << endl;
        }
    }
}

int main() {
   
    Outer::Inner::print(); // 访问嵌套命名空间
    return 0;
}

1.6.5 匿名命名空间

匿名命名空间用于定义仅在当前文件内可见的成员,类似于 static 关键字。示例

namespace {
   
    int value = 42; // 仅在当前文件内可见
}

int main() {
   
    cout << value << endl; // 直接访问
    return 0;
}

1.6.6 命名空间别名

可以为命名空间定义别名,简化代码。示例

namespace VeryLongNamespaceName {
   
    void print() {
   
        cout << "Hello!" << endl;
    }
}

namespace VLN = VeryLongNamespaceName; // 定义别名

int main() {
   
    VLN::print(); // 使用别名访问
    return 0;
}

1.6.7 标准命名空间

C++ 标准库的所有内容都定义在 std 命名空间中。

示例

#include <iostream>

int main() {
   
    std::cout << "Hello, World!" << std::endl; // 使用 std:: 访问
    return 0;
}

引入 std 命名空间

#include <iostream>
using namespace std; // 引入 std 命名空间

int main() {
   
    cout << "Hello, World!" << endl; // 直接访问
    return 0;
}

1.6.8 综合练习题

  1. 使用 namespace space名称 可以定义命名空间。通过命名空间可以调用所在区域函数
  2. 使用 using namespace space名称 可以通过该方式引入命名空间。这个指令会告诉编译器,后续的代码将使用指定的命名空间中的名称。
  3. 嵌套的命名空间,命名空间可以嵌套,可以在一个命名空间中定义另一个命名空间。可以通过使用 :: 运算符来访问嵌套的命名空间中的成员。
//定义命名空间
namespace first_space {
   
    void fun() {
   
        cout << "Inside first_space" << endl;
    }
}
namespace second_space {
   
    void fun() {
   
        cout << "Inside second_space" << endl;
    }
}
void test1() {
   
    cout << "定义命名空间" << endl;
    // 调用第一个命名空间中的函数
    first_space::fun();
    // 调用第二个命名空间中的函数
    second_space::fun();
}

//using 指令
using namespace first_space;
//using 指令引入的名称遵循正常的范围规则。名称从使用 using 指令开始是可见的,直到该范围结束。此时,在范围以外定义的同名实体是隐藏的。
void test2() {
   
    cout << "using 指令" << endl;
    fun();
}

//嵌套的命名空间
namespace first_sp{
   
    void funSp() {
   
        cout << "Inside first_sp,逗比充1" << endl;
    }
    namespace second_sp {
   
        void funSp() {
   
            cout << "Inside second_sp,逗比充2" << endl;
        }
    }
}
using namespace first_sp::second_sp;


void test3() {
   
    cout << "嵌套的命名空间" << endl;
    // 调用第二个命名空间中的函数
    funSp();
}

int main() {
   
    test1();
    test2();
    test3();
    return 0;
}

1.7 头文件

在 C++ 中,头文件是用于声明类、函数、变量等的文件,通常以 .h.hpp 为扩展名。

1.7.1 头文件扩展名

  • .h:传统的 C 和 C++ 头文件扩展名,广泛使用。
  • .hpp:更现代的 C++ 头文件扩展名,通常用于强调该头文件是专门为 C++ 设计的。
  • .hh:在某些项目中也会使用,通常是 UNIX 或 Linux 社区的风格。
  • .tpp:用于模板类或函数的实现文件(通常与 .hpp 配合使用)。
扩展名 语言 用途 适用场景
.h C 和 C++ 传统头文件,兼容 C 和 C++ 兼容 C 和 C++ 的项目
.hpp C++ 现代 C++ 头文件,强调 C++ 特性 纯 C++ 项目
.hh C++ 特定社区风格的头文件 UNIX 或 Linux 社区的项目
.tpp C++ 模板类或模板函数的实现文件 需要分离模板声明与实现的项目

1.7.2 头文件和实现类

头文件中只放类、函数、变量的声明,具体实现放在 .cpp 文件中。建议每个类单独一个头文件,便于维护和管理。 例如:

头文件声明:

// MyClass.h
class MyClass {
   
public:
  void doSomething();
};

实现类做具体实现:

// MyClass.cpp
#include "MyClass.h"
void MyClass::doSomething() {
   
  // 实现
}

1.7.3 头文件保护

使用头文件保护(#ifndef / #define#pragma once)防止重复包含。 例如:

// MyClass.h
#ifndef MYCLASS_H
#define MYCLASS_H

class MyClass {
   
public:
  void doSomething();
};

#endif // MYCLASS_H

1.8 修饰符和标志符

在 C++ 中,修饰符标志符是用于修饰变量、函数、类等的关键字或符号,它们可以改变对象的属性、行为或作用域。

1.8.1 访问控制修饰符

访问控制修饰符用于定义类成员的访问权限。

  • public:公有成员,任何地方都可以访问。
  • protected:受保护成员,只有类本身、派生类可以访问。
  • private:私有成员,只有类本身可以访问。

1.8.2 存储类型修饰符

存储类型修饰符用于定义变量的存储方式和生命周期。

  • auto:自动变量,编译器自动推导类型(C++11 引入)。
  • register:建议将变量存储在寄存器中(现代编译器通常忽略)。
  • static:静态变量,生命周期贯穿整个程序。
  • extern:声明变量在其他文件中定义。
  • mutable:允许在 const 对象中修改成员变量。

1.8.3 类型限定符

类型限定符用于修饰变量的行为或属性。

  • const:表示变量不可修改。
  • volatile:表示变量可能被外部修改,禁止编译器优化。
  • restrict:用于指针,表示指针是唯一访问内存的方式(C99 引入,C++ 中不常用)。

示例:

const int a = 10;          // 常量
volatile int b = 20;       // 易变变量

1.8.4 函数修饰符

函数修饰符用于限定函数的行为。

  • inline:建议编译器将函数内联。
  • virtual:表示函数是虚函数,可以被派生类重写。
  • override:明确表示重写基类的虚函数(C++11 引入)。
  • final:禁止派生类重写虚函数(C++11 引入)。
  • constexpr:表示函数可以在编译时求值(C++11 引入)。

示例:

class Base {
   
public:
    virtual void func() const; // 虚函数
};

class Derived : public Base {
   
public:
    void func() const override; // 重写基类虚函数
};

1.8.5 类修饰符

类修饰符用于限定类的行为。

  • final:禁止类被继承(C++11 引入)。
  • abstract:通过纯虚函数实现抽象类(没有直接的关键字,纯虚函数实现)。

示例:

class Base final {
    // 禁止继承
    // 类定义
};

1.8.6 其他修饰符

  • friend:允许非成员函数或其他类访问私有成员。
  • explicit:禁止构造函数的隐式转换(C++11 引入)。
  • noexcept:表示函数不会抛出异常(C++11 引入)。

示例:

class MyClass {
   
    friend void friendFunc(); // 友元函数
};

1.8.7 标志符

作用:C++规定给标识符(变量、常量)命名时,有一套自己的规则

C++ 标识符是用来标识变量、函数、类、模块,或任何其他用户自定义项目的名称。

  • 标识符不能是关键字
  • 标识符只能由字母、数字、下划线组成
  • 第一个字符必须为字母或下划线
  • 标识符中字母区分大小写

建议:给标识符命名时,争取做到见名知意的效果,方便自己和他人的阅读

有效标志符,一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。

无效标志符,C++ 标识符内不允许出现标点字符,比如 @、& 和 %。C++ 是区分大小写的编程语言。

1.9 关键字

C++ 中的关键字是语言保留的标识符,具有特定的含义和用途,不能用作变量名、函数名或其他用户定义的标识符。

C++ 的关键字包括从 C 继承的关键字以及 C++ 自己引入的关键字。

作用:关键字是C++中预先保留的单词(标识符)

  • 在定义变量或者常量时候,不要用关键字

C++关键字如下:

asm do if return typedef
auto double inline short typeid
bool dynamic_cast int signed typename
break else long sizeof union
case enum mutable static unsigned
catch explicit namespace static_cast using
char export new struct virtual
class extern operator switch void
const false private template volatile
const_cast float protected this wchar_t
continue for public throw while
default friend register true
delete goto reinterpret_cast try

提示:在给变量或者常量起名称时候,不要用C++得关键字,否则会产生歧义。

1.9.1 数据类型关键字

这些关键字用于定义变量或函数的类型。

关键字 含义
int 整型
float 浮点型
double 双精度浮点型
char 字符型
bool 布尔型(truefalse
void 无类型
wchar_t 宽字符型
long 长整型
short 短整型
signed 有符号类型
unsigned 无符号类型

1.9.2 存储类型关键字

这些关键字用于定义变量的存储方式和生命周期。

关键字 含义
auto 自动类型推导(C++11 引入)
static 静态变量
extern 外部变量
register 寄存器变量(建议存储在寄存器中,现代编译器通常忽略)
mutable 允许在 const 对象中修改成员变量

1.9.3 控制语句关键字

这些关键字用于控制程序的执行流程。

关键字 含义
if 条件语句
else 条件语句的分支
switch 多分支选择语句
case switch 的分支
default switch 的默认分支
for 循环语句
while 循环语句
do 循环语句
break 跳出循环或 switch 语句
continue 跳过本次循环
return 从函数返回
goto 无条件跳转

1.9.4 类和对象关键字

这些关键字用于定义和操作类、对象和继承。

关键字 含义
class 定义类
struct 定义结构体
union 定义联合体
enum 定义枚举
private 私有访问权限
protected 受保护访问权限
public 公有访问权限
virtual 虚函数
override 重写基类虚函数(C++11 引入)
final 禁止继承或重写(C++11 引入)
explicit 禁止隐式转换(C++11 引入)
friend 友元函数或友元类
this 当前对象的指针
new 动态分配内存
delete 释放动态分配的内存

1.9.5 异常处理关键字

这些关键字用于处理异常。

关键字 含义
try 尝试执行一段代码
catch 捕获异常
throw 抛出异常
noexcept 表示函数不会抛出异常(C++11 引入)

1.9.6 类型转换关键字

这些关键字用于进行显式类型转换。

关键字 含义
static_cast 静态类型转换
dynamic_cast 动态类型转换
const_cast 去掉或添加 const 限定符
reinterpret_cast 重新解释类型

1.9.7 操作符相关关键字

这些关键字用于定义或重载操作符。

关键字 含义
operator 重载操作符
sizeof 获取对象或类型的大小
typeid 获取对象的类型信息
alignof 获取类型的对齐要求(C++11 引入)

1.9.8 模板相关关键字

这些关键字用于定义和操作模板。

关键字 含义
template 定义模板
typename 定义模板参数或别名
constexpr 编译时常量(C++11 引入)
decltype 推导表达式的类型(C++11 引入)

1.9.9 命名空间相关关键字

这些关键字用于定义和操作命名空间。

关键字 含义
namespace 定义命名空间
using 使用命名空间或类型别名

1.9.10 其他关键字

这些关键字用于其他特殊用途。

关键字 含义
nullptr 空指针(C++11 引入)
static_assert 静态断言(C++11 引入)
export 模块导出(C++20 引入)
import 模块导入(C++20 引入)
concept 定义概念(C++20 引入)
co_await 协程等待(C++20 引入)
co_yield 协程生成值(C++20 引入)
co_return 协程返回值(C++20 引入)

C++从入门系统教程

目录
相关文章
|
11天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
10天前
|
存储 人工智能 搜索推荐
终身学习型智能体
当前人工智能前沿研究的一个重要方向:构建能够自主学习、调用工具、积累经验的小型智能体(Agent)。 我们可以称这种系统为“终身学习型智能体”或“自适应认知代理”。它的设计理念就是: 不靠庞大的内置知识取胜,而是依靠高效的推理能力 + 动态获取知识的能力 + 经验积累机制。
356 131
|
10天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
443 131
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
4天前
|
存储 安全 前端开发
如何将加密和解密函数应用到实际项目中?
如何将加密和解密函数应用到实际项目中?
206 138
|
10天前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
405 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
4天前
|
存储 JSON 安全
加密和解密函数的具体实现代码
加密和解密函数的具体实现代码
204 136
|
22天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1363 8
|
9天前
|
监控 JavaScript Java
基于大模型技术的反欺诈知识问答系统
随着互联网与金融科技发展,网络欺诈频发,构建高效反欺诈平台成为迫切需求。本文基于Java、Vue.js、Spring Boot与MySQL技术,设计实现集欺诈识别、宣传教育、用户互动于一体的反欺诈系统,提升公众防范意识,助力企业合规与用户权益保护。