跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • Online Tools
  • 用户
  • 群组
折叠
品牌标识

D2Learn Forums

  1. 主页
  2. Open Courses | 公开课
  3. mcpp-standard | 现代C++核心特性练习
  4. 【开源】动手学现代Cpp核心特性 - "像打游戏一样学习C++"

【开源】动手学现代Cpp核心特性 - "像打游戏一样学习C++"

已定时 已固定 已锁定 已移动 mcpp-standard | 现代C++核心特性练习
现代c++cppc++11mcpp-standardxlingsd2x动手学
6 帖子 2 发布者 59 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • SPeakS 离线
    SPeakS 离线
    SPeak d2learn-dev
    编写于 最后由 SPeak 编辑
    #1

    mcpp-standard是一个强调动手实践的现代C++核心语言特性教程项目。基于对"编译器驱动开发模式"的扩展, 把每个C++核心语言特性设计成对应的练习代码"关卡", 并结合自动化的代码检测工具, 提供了一种具有交互感(式)的方式来学习现代C++和核心特性......

    如果你了解过rustlings这个项目, 那么你可以认为这是C++版本的 -- cpplings

    下面就从项目目标、内容、自动化工具、练习代码检测示例等角度详细介绍一下这个项目....

    68c27d22-51e4-4989-a1b1-b8bd5e847f05-image.png


    0.目标

    • 1. 任何人都可以在网上免费获取课程资源
    • 2. 强调通过动手实践/代码练习的方式来学习
    • 3. 提供自动化的代码练习 + 方便的环境搭建的工具支持
    • 4. 通过社区共享、共建、互助实现良性循环 - 开源 + 论坛

    1.这里的"现代C++"指的是什么?

    这里指的是狭义上的现代C++, 即C++11及之后的核心标准特性的集合

    865f7495-62dc-4a8b-bd02-44fdc67ceaf3-image.png

    2.项目内容结构

    • 练习代码(核心): 每个核心特性都会制作1个或多个对应的练习代码, 并由xlings工具提供自动化检测和环境支持
    • 视频: 每个代码练习也会提供对应的视频讲解和代码示例的演示
    • 社区支持: 提供一个专属教程的论坛版块, 用于分享代码和交流讨论
    • 文档: 每个练习中有对应的cpprefrence参考链接, 当做练习遇到困难时可以查询

    4a1d4561-7861-49f1-8ce9-eab83e68a2d6-image.png

    3.一键式的练习代码环境搭建

    通过一行xlings install mcpp-standard命令即可获取项目代码, 并且自动检测本地环境和配置依赖

    c8af6168-c5a6-42c9-b66d-ff16d0711aa4-image.png

    4.自动化检测程序简介 - 实时代码检测 + 信息提示 + 练习文件自动跳转

    使用xlings checker进入自动化代码练习环境后, 工具会自动定位打开对应的练习代码文件, 并在控制台输出提示编译器的错误及提示信息。一般检测程序分两个检测阶段: 第一个是编译期检测, 即你需要通过练习代码中的提示信息和控制台编译器的报错, 修复代码的编译错误; 第二个是运行时检测, 即当前代码运行时是否能通过所有检查点。当修复编译错误并通过所有检查点时, 控制台就会显示当前练习通过并提示你进入下一个练习

    代码练习文件示例

    // mcpp-standard: https://github.com/Sunrisepeak/mcpp-standard
    // license: Apache-2.0
    // file: dslings/hello-mcpp.cpp
    //
    // Exercise/练习: 自动化代码练习使用教学
    //
    // Tips/提示:
    //    该项目是使用xlings工具搭建的自动化代码练习项目, 通过在项目根目录下
    //    执行 xlings checker 进入"编译器驱动开发模式"的练习代码自动检测.
    //    你需要根据控制台的报错和提示信息, 修改代码中的错误. 当修复所有编译错误和
    //    运行时检查点后, 你可以删除或注释掉代码中的 D2X_WAIT 宏, 会自动进入下一个练习.
    //
    //      - D2X_WAIT: 该宏用于隔离不同练习, 你可以删除或注释掉该宏, 进入下一个练习.
    //      - d2x_assert_eq: 该宏用于运行时检查点, 你需要修复代码中的错误, 使得所有
    //      - D2X_YOUR_ANSWER: 该宏用于提示你需要修改的代码, 一般用于代码填空(即用正确的代码替换这个宏)
    //
    // Auto-Checker/自动检测命令:
    //
    //   d2x checker hello-mcpp
    //
    
    #include <d2x/common.hpp>
    
    // 修改代码时可以观察到控制台"实时"的变化
    
    int main() {
    
        std::cout << "hello, mcpp!" << std:endl; // 0.修复这个编译错误
    
        int a = 1.1; // 1.修复这个运行时错误, 修改int为double, 通过检查
    
        d2x_assert_eq(a, 1.1); // 2.运行时检查点, 需要修复代码通过所有检查点(不能直接删除检查点代码)
    
        D2X_YOUR_ANSWER b = a; // 3.修复这个编译错误, 给b一个合适的类型
    
        d2x_assert_eq(b, 1); // 4.运行时检查点2
    
        D2X_WAIT // 5.删除或注释掉这个宏, 进入下一个练习(项目正式代码练习)
    
        return 0;
    }
    

    控制台输出及解释

    🌏Progress: [>----------] 0/10 -->> 显示当前的练习进度
    
    [Target: 00-0-hello-mcpp] - normal -->> 当前的练习名
    
    ❌ Error: Compilation/Running failed for dslings/hello-mcpp.cpp -->> 显示检测状态
    
     The code exist some error!
    
    ---------C-Output--------- - 编译器输出信息
    [HONLY LOGW]: main: dslings/hello-mcpp.cpp:24 - ❌ | a == 1.1 (1 == 1.100000) -->> 错误提示及位置(24行)
    [HONLY LOGW]: main: dslings/hello-mcpp.cpp:26 - 🥳 Delete the D2X_WAIT to continue...
    
    
    AI-Tips-Config: https://d2learn.org/docs/xlings -->> AI提示(需要配置大模型的key, 可不使用)
    
    ---------E-Files---------
    dslings/hello-mcpp.cpp -->> 当前检测的文件
    -------------------------
    
    Homepage: https://github.com/d2learn/xlings
    

    自动检测程序和练习状态对比

    946943bd-141b-4271-861c-27f06ce0780e-image.png

    5.C++特性和视频/代码列表

    c++标准 特性 标题 练习代码/视频 备注
    项目介绍 动手学 现代C++核心语言特性练习 video
    项目使用教程/引导 hello mcpp code / video
    cpp11 00 - auto和decltype 类型推导 code / video
    decltype注意事项 code / video 补充
    01 - default和delete 控制默认构造函数生成 code / video
    类型对象行为控制示例 code / video
    02 - override和final 重写显示意图和编译器检查 code / video
    继承和重现限制 code / video
    03 - 后置返回值类型 后置返回值类型基础用法 code / video
    04 - 右值引用 右值引用与临时对象生命周期延长的可变性质 code / video
    05 - 移动语义 移动构造和触发时机 code / video
    移动赋值和触发时机 code / video
    移动的不是对象而是资源 code / video
    06 - 作用域枚举 传统枚举的问题 code / video
    作用域枚举的基本用法 code / video
    07 - constexpr const和constexpr有什么不同 code / video
    编译期计算应用示例 code / video
    ... ... ...

    6.社区 | 交流

    • 即时交流(Q群): 167535744
    • 练习代码/技术交流&讨论: 论坛版块

    7.Other

    • 项目地址: https://github.com/Sunrisepeak/mcpp-standard
    • 工具地址: https://github.com/d2learn/xlings
    1 条回复 最后回复
    0
    • SPeakS SPeak 固定了该主题
    • ziyikongZ 离线
      ziyikongZ 离线
      ziyikong
      编写于 最后由 编辑
      #2

      image.png

      SPeakS 2 条回复 最后回复
      0
      • ziyikongZ 离线
        ziyikongZ 离线
        ziyikong
        编写于 最后由 编辑
        #3

        这是怎么了

        1 条回复 最后回复
        0
        • ziyikongZ 离线
          ziyikongZ 离线
          ziyikong
          编写于 最后由 编辑
          #4

          第一个所有bug解决完后出现的

          1 条回复 最后回复
          0
          • SPeakS 离线
            SPeakS 离线
            SPeak d2learn-dev
            回复了ziyikong 最后由 编辑
            #5

            @ziyikong 可以创建发一个新贴, 详细描述一下问题 环境/系统版本、报错log、xlings是否可用及版本号, 以及复现步骤...

            1 条回复 最后回复
            0
            • SPeakS 离线
              SPeakS 离线
              SPeak d2learn-dev
              回复了ziyikong 最后由 编辑
              #6

              @ziyikong 今天或明天我也会再制作一个windows上练习代码环境搭建的视频细节

              1 条回复 最后回复
              0

              • 登录

              • 没有帐号? 注册

              • 登录或注册以进行搜索。
              d2learn forums Powered by NodeBB
              • 第一个帖子
                最后一个帖子
              0
              • 版块
              • 最新
              • 标签
              • 热门
              • Online Tools
              • 用户
              • 群组