CodeGym
AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题

课时

  • 评论
  • 关于我们
开始
开始学习
立即开始学习
  • 我的进度
  • 课程
  • 任务地图
  • 课程
  • CTAD:类模板参数的推导

    C++ SELF
    等级 57,课时 0
    解析 CTAD( Class Template Argument Deduction)——C++17+ 的机制,允许不用手工写类模板参数:编译器从构造函数的参数中推导它们。通过 std::pair、 std::array、 std::vector 的示例讨论优点和陷阱( {} 与 ()),然后在自己的代码中应用 CTAD(模板 Box<T> 和迷你上下文 TaskTracker)并巩固常见错误。
    可用
  • 典型陷阱 — auto x { 1 } vs auto x = { 1 }

    C++ SELF
    等级 57,课时 1
    我们来分析,为什么花括号 {} 与 auto 结合时会突然改变推导出来的类型:有时得到普通的 int,有时却是 std::initializer_list<T>。通过示例说明各种“症状”,比如突然出现 .size()、与字符串字面量相关的陷阱,以及如何用正确的方式显式固定容器类型( std::vector<std::string>)。
    可用
  • 为什么需要 concepts

    C++ SELF
    等级 57,课时 2
    我们来解析,为什么“通用”的 template 几乎总是隐藏着隐含要求(操作符 +、 *、方法 size()、函数 begin()/ end()),为什么在实例化时会出现“长篇”错误,以及 concepts 和 constraints 如何把契约在签名中显式化并把诊断移到更接近调用处。通过 Transaction、 sum2 和 safe_square 的示例展示效果并解析典型错误。
    可用
  • 最简单的 concept 和 requires

    C++ SELF
    等级 57,课时 3
    我们来讲讲在 C++20/23 中如何停止“把模板喂任意类型”,并通过 concept 和 requires 预先描述契约:什么情况下 requires-expression ( requires(...) { ... }) 与 requires-clause (… requires MyConcept< T>) 不同,如何构造最小的 HasSize 和 Addable,以及为什么写法 requires( T x) 可能意外地要求可拷贝性(并“弄坏” std::unique_ptr)。
    可用
  • 标准 concepts — std::integral, std::floating_point, std::ranges::range

    C++ SELF
    等级 57,课时 4
    我们来解析为什么在 C++23 中将标准的 concepts 用作模板的契约: constraints 如何在编译阶段“过滤”不合适的类型,整数( std::integral)和浮点( std::floating_point)的限制有何不同,以及如何通过 std::ranges::range 将算法泛化到任意序列。实践中我们构建一个简化版本的 DataBox 实用程序并讨论典型错误。
    可用
Learn
  • 注册
  • Java 课程
  • 任务帮助
  • 定价
  • Java 语法
社区
  • 用户
  • 文章
  • 论坛
  • 聊天
  • 成功故事
  • 动态
  • 联盟计划
Company
  • 关于我们
  • 联系方式
  • 评价
  • 媒体中心
  • CodeGym for EDU
  • 常见问题
  • 支持
CodeGymCodeGym 是一个从零开始学习 Java 编程的在线课程。该课程是初学者掌握 Java 的完美方式。它包含 1200+ 个带即时验证的任务,以及必要的 Java 基础理论。为了帮助你在学习中取得成功,我们实现了一系列激励功能:测验、编码项目、关于高效学习的内容,以及 Java 开发者职业相关内容。
关注我们
界面语言
English Deutsch Español हिन्दी Français Português Polski বাংলা
简体中文
मराठी தமிழ் Italiano Bahasa Indonesia 繁體中文 Nederlands 日本語 한국어 Bulgarian Danish Hungarian Basa Jawa Malay Norwegian Romanian Swedish Telugu Thai Українська Filipino Turkish Azərbaycan Русский Vietnamese
“程序员是培养出来的,不是天生的” © 2026 CodeGym
MastercardVisa
“程序员是培养出来的,不是天生的” © 2026 CodeGym