练习 / cpp

C++ 练习

C++ 的全部练习都来自可随时对照的主题。

92项练习 离线运行
cpp 测验 新题 int grid[2][3] 在普通表达式中发生数组到指针转换后,类型是什么? C++23 内置数组的边界、初始化、指针转换、多维布局与生命周期,以及何时改用 std::array、span 或 vector。 进阶 1分钟 · 来自 C 风格数组 cpp 测验 新题 在 C++23 中,void read(const int values[8]) 强制了什么契约? C++23 内置数组的边界、初始化、指针转换、多维布局与生命周期,以及何时改用 std::array、span 或 vector。 入门 1分钟 · 来自 C 风格数组 cpp 预测输出 新题 这段程序会输出什么? C++23 内置数组的边界、初始化、指针转换、多维布局与生命周期,以及何时改用 std::array、span 或 vector。 入门 2分钟 · 来自 C 风格数组 cpp 审查 AI 代码 新题 审查生成的读数平均值 C++23 内置数组的边界、初始化、指针转换、多维布局与生命周期,以及何时改用 std::array、span 或 vector。 高级 6分钟 · 来自 C 风格数组 cpp 找出 bug 新题 找出四元素求和里的 bug C++23 内置数组的边界、初始化、指针转换、多维布局与生命周期,以及何时改用 std::array、span 或 vector。 入门 4分钟 · 来自 C 风格数组 cpp 测验 新题 关于 sizeof(char),哪项说法符合可移植 C? 从翻译单元、类型与表达式开始,掌握 C23 的控制流、函数和错误边界,并避开整数转换与未定义行为陷阱。 入门 2分钟 · 来自 C 语言基础 cpp 预测输出 新题 这段程序会输出什么? 从翻译单元、类型与表达式开始,掌握 C23 的控制流、函数和错误边界,并避开整数转换与未定义行为陷阱。 入门 2分钟 · 来自 C 语言基础 cpp 审查 AI 代码 新题 审查生成的读数平均值 从翻译单元、类型与表达式开始,掌握 C23 的控制流、函数和错误边界,并避开整数转换与未定义行为陷阱。 高级 10分钟 · 来自 C 语言基础 cpp 找出 bug 新题 找出余额比较里的 bug 从翻译单元、类型与表达式开始,掌握 C23 的控制流、函数和错误边界,并避开整数转换与未定义行为陷阱。 进阶 4分钟 · 来自 C 语言基础 cpp 测验 新题 对于 int next = index++ + index;,可移植 C 能得出什么结论? 从翻译单元、类型与表达式开始,掌握 C23 的控制流、函数和错误边界,并避开整数转换与未定义行为陷阱。 进阶 3分钟 · 来自 C 语言基础 cpp 测验 新题 fread(buffer, sizeof(uint32_t), 8, stream) 返回什么? 使用 C23 的 stdio 流可靠地打开、读取、写入和定位文件,并正确处理 EOF、短计数、缓冲与关闭错误。 入门 2分钟 · 来自 C 文件 I/O cpp 预测输出 新题 这段程序会输出什么? 使用 C23 的 stdio 流可靠地打开、读取、写入和定位文件,并正确处理 EOF、短计数、缓冲与关闭错误。 入门 3分钟 · 来自 C 文件 I/O cpp 审查 AI 代码 新题 审查生成的文件复制 使用 C23 的 stdio 流可靠地打开、读取、写入和定位文件,并正确处理 EOF、短计数、缓冲与关闭错误。 高级 12分钟 · 来自 C 文件 I/O cpp 找出 bug 新题 找出字节复制循环里的 bug 使用 C23 的 stdio 流可靠地打开、读取、写入和定位文件,并正确处理 EOF、短计数、缓冲与关闭错误。 进阶 4分钟 · 来自 C 文件 I/O cpp 测验 新题 在 r+b 更新流上,一次未遇到 EOF 的成功读取与随后的写入之间通常必须有什么操作? 使用 C23 的 stdio 流可靠地打开、读取、写入和定位文件,并正确处理 EOF、短计数、缓冲与关闭错误。 进阶 3分钟 · 来自 C 文件 I/O cpp 测验 新题 哪个声明表示 handler 是一个指针,指向接收 int 并返回 int 的函数? 理解 C23 函数指针的声明、兼容类型、回调上下文与分发表,并避免错误强转、空调用和悬空上下文。 入门 1分钟 · 来自 C 函数指针 cpp 预测输出 新题 这段程序会输出什么? 理解 C23 函数指针的声明、兼容类型、回调上下文与分发表,并避免错误强转、空调用和悬空上下文。 入门 2分钟 · 来自 C 函数指针 cpp 测验 新题 某 API 会保留回调与 void* 上下文,直到 unregister 返回。哪种上下文可以安全注册? 理解 C23 函数指针的声明、兼容类型、回调上下文与分发表,并避免错误强转、空调用和悬空上下文。 进阶 1分钟 · 来自 C 函数指针 cpp 审查 AI 代码 新题 审查生成的路由注册表 理解 C23 函数指针的声明、兼容类型、回调上下文与分发表,并避免错误强转、空调用和悬空上下文。 高级 6分钟 · 来自 C 函数指针 cpp 找出 bug 新题 找出 qsort 比较器里的 bug 理解 C23 函数指针的声明、兼容类型、回调上下文与分发表,并避免错误强转、空调用和悬空上下文。 进阶 4分钟 · 来自 C 函数指针 cpp 测验 新题 哪种指针可以传给 free? 用 C23 的分配函数管理大小、所有权与生命周期,并用可验证的清理路径避免泄漏、越界和释放后使用。 进阶 1分钟 · 来自 C 动态内存管理 cpp 预测输出 新题 当 calloc 成功时,这段 C23 程序会输出什么? 用 C23 的分配函数管理大小、所有权与生命周期,并用可验证的清理路径避免泄漏、越界和释放后使用。 入门 2分钟 · 来自 C 动态内存管理 cpp 测验 新题 对有效的非零大小调用 realloc(owner, larger_size) 并返回 NULL 时,哪项保证成立? 用 C23 的分配函数管理大小、所有权与生命周期,并用可验证的清理路径避免泄漏、越界和释放后使用。 进阶 1分钟 · 来自 C 动态内存管理 cpp 审查 AI 代码 新题 审查生成的字节缓冲区 用 C23 的分配函数管理大小、所有权与生命周期,并用可验证的清理路径避免泄漏、越界和释放后使用。 高级 6分钟 · 来自 C 动态内存管理 cpp 找出 bug 新题 找出数组复制分配里的 bug 用 C23 的分配函数管理大小、所有权与生命周期,并用可验证的清理路径避免泄漏、越界和释放后使用。 进阶 4分钟 · 来自 C 动态内存管理 cpp 测验 新题 const int *cursor 允许哪种操作? C 指针保存对象地址;理解类型、解引用、数组边界、生命周期与限定符,才能写出契约明确且可检查的底层接口。 入门 1分钟 · 来自 C 指针 cpp 测验 新题 在 void inspect(const int *values) 内,sizeof(values) 测量什么? C 指针保存对象地址;理解类型、解引用、数组边界、生命周期与限定符,才能写出契约明确且可检查的底层接口。 入门 1分钟 · 来自 C 指针 cpp 预测输出 新题 这段程序会输出什么? C 指针保存对象地址;理解类型、解引用、数组边界、生命周期与限定符,才能写出契约明确且可检查的底层接口。 入门 2分钟 · 来自 C 指针 cpp 审查 AI 代码 新题 审查生成的指针范围查找 C 指针保存对象地址;理解类型、解引用、数组边界、生命周期与限定符,才能写出契约明确且可检查的底层接口。 高级 6分钟 · 来自 C 指针 cpp 找出 bug 新题 找出局部读数指针里的 bug C 指针保存对象地址;理解类型、解引用、数组边界、生命周期与限定符,才能写出契约明确且可检查的底层接口。 入门 4分钟 · 来自 C 指针 cpp 测验 新题 执行 #define CACHE_ENABLED 0 后,哪个条件会选择关闭分支? C 预处理器在编译前展开宏、包含头文件并选择条件代码;掌握词元替换、配置边界与可验证的宏写法。 入门 1分钟 · 来自 C 预处理器 cpp 测验 新题 传统的头文件防重复包含能保证什么? C 预处理器在编译前展开宏、包含头文件并选择条件代码;掌握词元替换、配置边界与可验证的宏写法。 入门 1分钟 · 来自 C 预处理器 cpp 预测输出 新题 这段程序会输出什么? C 预处理器在编译前展开宏、包含头文件并选择条件代码;掌握词元替换、配置边界与可验证的宏写法。 进阶 2分钟 · 来自 C 预处理器 cpp 审查 AI 代码 新题 审查生成的标签复制辅助函数 C 预处理器在编译前展开宏、包含头文件并选择条件代码;掌握词元替换、配置边界与可验证的宏写法。 高级 7分钟 · 来自 C 预处理器 cpp 找出 bug 新题 找出 MAX_VALUE 宏里的 bug C 预处理器在编译前展开宏、包含头文件并选择条件代码;掌握词元替换、配置边界与可验证的宏写法。 进阶 4分钟 · 来自 C 预处理器 cpp 测验 新题 协议字节被转换成 enum MessageKind 后,用它索引处理函数表之前应该做什么? 用结构体组织记录,用联合体复用存储,并用枚举标记状态;重点掌握内存布局、复制语义和带标记联合体的安全边界。 进阶 1分钟 · 来自 C 结构体、联合体与枚举 cpp 预测输出 新题 这段程序会输出什么? 用结构体组织记录,用联合体复用存储,并用枚举标记状态;重点掌握内存布局、复制语义和带标记联合体的安全边界。 入门 2分钟 · 来自 C 结构体、联合体与枚举 cpp 审查 AI 代码 新题 审查生成的自有文本消息 用结构体组织记录,用联合体复用存储,并用枚举标记状态;重点掌握内存布局、复制语义和带标记联合体的安全边界。 高级 6分钟 · 来自 C 结构体、联合体与枚举 cpp 找出 bug 新题 找出标签联合体里的 bug 用结构体组织记录,用联合体复用存储,并用枚举标记状态;重点掌握内存布局、复制语义和带标记联合体的安全边界。 进阶 4分钟 · 来自 C 结构体、联合体与枚举 cpp 测验 新题 关于 sizeof(struct Record),哪项说法符合可移植 C? 用结构体组织记录,用联合体复用存储,并用枚举标记状态;重点掌握内存布局、复制语义和带标记联合体的安全边界。 进阶 1分钟 · 来自 C 结构体、联合体与枚举 cpp 测验 新题 联合体表示多种互斥载荷时,程序必须跟踪什么? 用结构体组织记录,用联合体复用存储,并用枚举标记状态;重点掌握内存布局、复制语义和带标记联合体的安全边界。 入门 1分钟 · 来自 C 结构体、联合体与枚举 cpp 测验 新题 对于其他部分完全相同的 class 与 struct 定义,语言层面有什么区别? C++ 类把状态与操作组织成用户定义类型;这里讲清访问控制、构造与不变量,以及编译器生成特殊成员函数时的边界。 入门 1分钟 · 来自 类 cpp 测验 新题 为什么只读取对象状态的成员函数通常应在末尾加 const? C++ 类把状态与操作组织成用户定义类型;这里讲清访问控制、构造与不变量,以及编译器生成特殊成员函数时的边界。 入门 1分钟 · 来自 类 cpp 预测输出 新题 这段程序会输出什么? C++ 类把状态与操作组织成用户定义类型;这里讲清访问控制、构造与不变量,以及编译器生成特殊成员函数时的边界。 入门 2分钟 · 来自 类 cpp 审查 AI 代码 新题 审查生成的课程注册 C++ 类把状态与操作组织成用户定义类型;这里讲清访问控制、构造与不变量,以及编译器生成特殊成员函数时的边界。 进阶 6分钟 · 来自 类 cpp 找出 bug 新题 找出 Invoice 初始化里的 bug C++ 类把状态与操作组织成用户定义类型;这里讲清访问控制、构造与不变量,以及编译器生成特殊成员函数时的边界。 进阶 4分钟 · 来自 类 cpp 测验 新题 构造函数在两个数据成员完成构造后抛出。哪些析构函数会执行? C++ 异常把错误检测与处理分离;理解类型匹配、栈展开、RAII、异常安全保证与 noexcept,才能让失败路径保持状态正确。 进阶 1分钟 · 来自 异常处理 cpp 测验 新题 异常试图离开 noexcept 函数时会发生什么? C++ 异常把错误检测与处理分离;理解类型匹配、栈展开、RAII、异常安全保证与 noexcept,才能让失败路径保持状态正确。 进阶 1分钟 · 来自 异常处理 cpp 预测输出 新题 这段程序会输出什么? C++ 异常把错误检测与处理分离;理解类型匹配、栈展开、RAII、异常安全保证与 noexcept,才能让失败路径保持状态正确。 进阶 2分钟 · 来自 异常处理 cpp 审查 AI 代码 新题 审查生成的账本导入 C++ 异常把错误检测与处理分离;理解类型匹配、栈展开、RAII、异常安全保证与 noexcept,才能让失败路径保持状态正确。 高级 6分钟 · 来自 异常处理 cpp 找出 bug 新题 找出记录导入清理里的 bug C++ 异常把错误检测与处理分离;理解类型匹配、栈展开、RAII、异常安全保证与 noexcept,才能让失败路径保持状态正确。 入门 4分钟 · 来自 异常处理 cpp 预测输出 新题 这段程序会输出什么? C++ 继承把基类子对象纳入派生类,并建立可替换的类型关系;重点掌握访问控制、构造顺序、对象切片和虚继承。 进阶 2分钟 · 来自 继承 cpp 测验 新题 公有继承对可访问的基类成员有什么影响? C++ 继承把基类子对象纳入派生类,并建立可替换的类型关系;重点掌握访问控制、构造顺序、对象切片和虚继承。 入门 1分钟 · 来自 继承 cpp 审查 AI 代码 新题 审查生成的报告继承体系 C++ 继承把基类子对象纳入派生类,并建立可替换的类型关系;重点掌握访问控制、构造顺序、对象切片和虚继承。 高级 6分钟 · 来自 继承 cpp 找出 bug 新题 找出任务继承体系里的 bug C++ 继承把基类子对象纳入派生类,并建立可替换的类型关系;重点掌握访问控制、构造顺序、对象切片和虚继承。 进阶 4分钟 · 来自 继承 cpp 测验 新题 在虚继承菱形中,哪个构造函数负责初始化完整对象共享的虚基类? C++ 继承把基类子对象纳入派生类,并建立可替换的类型关系;重点掌握访问控制、构造顺序、对象切片和虚继承。 高级 1分钟 · 来自 继承 cpp 测验 新题 为什么用 std::move(const_value) 构造 T 时,通常调用 T(const T&),而不是 T(T&&)? C++ 移动语义讲清右值引用、std::move、移动构造、有效但未指定状态,以及 noexcept 如何影响容器行为。 进阶 1分钟 · 来自 移动语义 cpp 测验 新题 对于可复制类型,std::move_if_noexcept 何时返回右值引用? C++ 移动语义讲清右值引用、std::move、移动构造、有效但未指定状态,以及 noexcept 如何影响容器行为。 高级 1分钟 · 来自 移动语义 cpp 预测输出 新题 这段程序会输出什么? C++ 移动语义讲清右值引用、std::move、移动构造、有效但未指定状态,以及 noexcept 如何影响容器行为。 进阶 2分钟 · 来自 移动语义 cpp 审查 AI 代码 新题 审查生成的 Packet 所有者 C++ 移动语义讲清右值引用、std::move、移动构造、有效但未指定状态,以及 noexcept 如何影响容器行为。 高级 6分钟 · 来自 移动语义 cpp 找出 bug 新题 找出移动后 vector 里的 bug C++ 移动语义讲清右值引用、std::move、移动构造、有效但未指定状态,以及 noexcept 如何影响容器行为。 进阶 4分钟 · 来自 移动语义 cpp 预测输出 新题 这段程序会输出什么? C++ 命名空间为名称划定作用域;理解限定查找、using、ADL 与链接边界,才能让头文件和库接口保持可预测。 进阶 2分钟 · 来自 命名空间 cpp 审查 AI 代码 新题 审查生成的头文件标签函数 C++ 命名空间为名称划定作用域;理解限定查找、using、ADL 与链接边界,才能让头文件和库接口保持可预测。 高级 6分钟 · 来自 命名空间 cpp 找出 bug 新题 找出渲染函数定义里的 bug C++ 命名空间为名称划定作用域;理解限定查找、using、ADL 与链接边界,才能让头文件和库接口保持可预测。 进阶 4分钟 · 来自 命名空间 cpp 测验 新题 头文件中的未命名命名空间变量被三个翻译单元包含后,会发生什么? C++ 命名空间为名称划定作用域;理解限定查找、using、ADL 与链接边界,才能让头文件和库接口保持可预测。 进阶 1分钟 · 来自 命名空间 cpp 测验 新题 在函数中写 using metrics::distance;,下列哪项描述最准确? C++ 命名空间为名称划定作用域;理解限定查找、using、ADL 与链接边界,才能让头文件和库接口保持可预测。 入门 1分钟 · 来自 命名空间 cpp 测验 新题 在 C++23 中,类定义 auto operator<=>(const T&) const = default; 且没有声明 operator== 时会怎样? 运算符重载让自定义类型使用自然的 C++ 表达式;理解候选查找、返回类型与比较契约,避免生成代码中常见的语义错误。 进阶 1分钟 · 来自 运算符重载 cpp 测验 新题 为什么表达式 a + b 能找到定义在 a 与 b 所属类中的友元 operator+? 运算符重载让自定义类型使用自然的 C++ 表达式;理解候选查找、返回类型与比较契约,避免生成代码中常见的语义错误。 进阶 1分钟 · 来自 运算符重载 cpp 预测输出 新题 这段程序会输出什么? 运算符重载让自定义类型使用自然的 C++ 表达式;理解候选查找、返回类型与比较契约,避免生成代码中常见的语义错误。 入门 2分钟 · 来自 运算符重载 cpp 预测输出 新题 这段程序会输出什么? 运算符重载让自定义类型使用自然的 C++ 表达式;理解候选查找、返回类型与比较契约,避免生成代码中常见的语义错误。 进阶 2分钟 · 来自 运算符重载 cpp 审查 AI 代码 新题 审查生成的 Polynomial 类 运算符重载让自定义类型使用自然的 C++ 表达式;理解候选查找、返回类型与比较契约,避免生成代码中常见的语义错误。 高级 6分钟 · 来自 运算符重载 cpp 找出 bug 新题 找出 Scores 索引里的 bug 运算符重载让自定义类型使用自然的 C++ 表达式;理解候选查找、返回类型与比较契约,避免生成代码中常见的语义错误。 进阶 4分钟 · 来自 运算符重载 cpp 测验 新题 资源所有型构造函数在两个 RAII 成员完成构造后抛出。哪些对象会析构? RAII 把资源所有权绑定到 C++ 对象生命周期;掌握确定性析构、异常路径、只移动所有者与无抛出清理。 进阶 1分钟 · 来自 RAII cpp 预测输出 新题 这段程序会输出什么? RAII 把资源所有权绑定到 C++ 对象生命周期;掌握确定性析构、异常路径、只移动所有者与无抛出清理。 进阶 2分钟 · 来自 RAII cpp 测验 新题 函数用 vector 管理所有临时内存,却在后续操作抛出前已向调用方的 vector 追加数据。RAII 能保证什么? RAII 把资源所有权绑定到 C++ 对象生命周期;掌握确定性析构、异常路径、只移动所有者与无抛出清理。 进阶 1分钟 · 来自 RAII cpp 审查 AI 代码 新题 修复生成式文件所有者 RAII 把资源所有权绑定到 C++ 对象生命周期;掌握确定性析构、异常路径、只移动所有者与无抛出清理。 高级 6分钟 · 来自 RAII cpp 找出 bug 新题 找出 Socket 包装器里的 bug RAII 把资源所有权绑定到 C++ 对象生命周期;掌握确定性析构、异常路径、只移动所有者与无抛出清理。 进阶 4分钟 · 来自 RAII cpp 测验 新题 下面哪个声明的形参是转发引用? C++ 引用把表达式绑定到已有对象或函数;理解左值引用、右值引用、生命周期与完美转发,避免悬空和误移动。 进阶 1分钟 · 来自 引用 cpp 预测输出 新题 这段程序会输出什么? C++ 引用把表达式绑定到已有对象或函数;理解左值引用、右值引用、生命周期与完美转发,避免悬空和误移动。 入门 2分钟 · 来自 引用 cpp 审查 AI 代码 新题 审查一段生成的注册表 C++ 引用把表达式绑定到已有对象或函数;理解左值引用、右值引用、生命周期与完美转发,避免悬空和误移动。 高级 8分钟 · 来自 引用 cpp 找出 bug 新题 找出 Result 工厂里的 bug C++ 引用把表达式绑定到已有对象或函数;理解左值引用、右值引用、生命周期与完美转发,避免悬空和误移动。 进阶 4分钟 · 来自 引用 cpp 测验 新题 函数保存了一个绑定临时实参的 const std::string& 形参。该临时对象通常存活多久? C++ 引用把表达式绑定到已有对象或函数;理解左值引用、右值引用、生命周期与完美转发,避免悬空和误移动。 进阶 1分钟 · 来自 引用 cpp 预测输出 新题 这段程序会输出什么? 用 unique_ptr 表达独占所有权,用 shared_ptr 与 weak_ptr 建模共享和观察关系,并避开控制块、循环引用与生命周期陷阱。 入门 2分钟 · 来自 智能指针 cpp 审查 AI 代码 新题 修复生成式工作器回调 用 unique_ptr 表达独占所有权,用 shared_ptr 与 weak_ptr 建模共享和观察关系,并避开控制块、循环引用与生命周期陷阱。 高级 10分钟 · 来自 智能指针 cpp 测验 新题 复制一个 shared_ptr 时会发生什么? 用 unique_ptr 表达独占所有权,用 shared_ptr 与 weak_ptr 建模共享和观察关系,并避开控制块、循环引用与生命周期陷阱。 入门 1分钟 · 来自 智能指针 cpp 测验 新题 关于 C++23 中 shared_ptr 与线程,哪项说法正确? 用 unique_ptr 表达独占所有权,用 shared_ptr 与 weak_ptr 建模共享和观察关系,并避开控制块、循环引用与生命周期陷阱。 高级 1分钟 · 来自 智能指针 cpp 找出 bug 新题 找出智能指针工厂里的 bug 用 unique_ptr 表达独占所有权,用 shared_ptr 与 weak_ptr 建模共享和观察关系,并避开控制块、循环引用与生命周期陷阱。 进阶 4分钟 · 来自 智能指针 cpp 测验 新题 构造 Derived 对象时,Base 构造函数通过 *this 调用虚成员。该调用可以分派到哪里? C++ 虚函数按对象的动态类型选择重写实现;掌握纯虚接口、安全析构、构造期分派和常见失效边界。 进阶 1分钟 · 来自 虚函数 cpp 测验 新题 重载决议选中虚成员后,通过 Base& 的普通调用由什么选择函数体? C++ 虚函数按对象的动态类型选择重写实现;掌握纯虚接口、安全析构、构造期分派和常见失效边界。 进阶 1分钟 · 来自 虚函数 cpp 预测输出 新题 这段程序会输出什么? C++ 虚函数按对象的动态类型选择重写实现;掌握纯虚接口、安全析构、构造期分派和常见失效边界。 高级 2分钟 · 来自 虚函数 cpp 审查 AI 代码 新题 审查生成的报表接口 C++ 虚函数按对象的动态类型选择重写实现;掌握纯虚接口、安全析构、构造期分派和常见失效边界。 高级 6分钟 · 来自 虚函数 cpp 找出 bug 新题 找出解码器重写里的 bug C++ 虚函数按对象的动态类型选择重写实现;掌握纯虚接口、安全析构、构造期分派和常见失效边界。 进阶 4分钟 · 来自 虚函数