lambda表达式(1)
代码存储位置:shanchuann/Modern_CPP lambda 表达式是 C++11 引入的匿名函数,是一个右值表达式,其类型为唯一的未命名非联合非聚合类类型,称为闭包类型(closure type),它被声明在包含 lambda 表达式的最小块作用域、类作用域或命名空间作用域中(用于 ADL)。它可以在需要函数的地方直接定义,无需单独声明,极大简化了代码编写。 123456789//lambda 表达式是 C++11 引入的**匿名函数**,属于*无名的非联合非聚类*类型struct X :decltype([] {}) { // 继承自 lambda 表达式的类型 void operator()() { cout << "X::operator()" << endl; }};int main() { X x; x(); // 调用 X::operator() //输出:X::operator() return 0;} 这是一个有...
Noxcept
代码存储位置:shanchuann/Modern_CPP noexcept 说明符(C++11 起)noexcept 是一个异常说明符(exception specifier),用于明确指定函数是否可能抛出异常。 语法 语法形式 编号 说明 noexcept (1) noexcept(表达式) (2) throw() (3) (C++17 中弃用,C++20 中移除) (1) 等同于 noexcept(true) (2) 若表达式求值为 true,则函数声明为不抛出任何异常。noexcept 后的 ( 始终是此形式的一部分(它绝不能用于开始初始化器)。 (3) 等同于 noexcept(true)(关于其在 C++17 之前的语义,见 “动态异常规范”)。 表达式:可按上下文转换为 bool 类型的常量表达式。 在 C++17 前,noexcept 说明符不属于函数类型(与动态异常规范类似),仅能用于以下场景: 作为 lambda 声明符的一部分; 作为 “顶级函数声明符” 的一部分 —— 用于声明函数、变量、函数类型的非静态数据成员、...
CMake从头开始(1)
CMake,Makefile,MakeCMake 是一个 构建系统生成器,它根据一个高级的、跨平台的配置文件 CMakeLists.txt 来生成 Makefile。然后,Make 这个 构建工具读取 Makefile 并执行指令,调用编译器等工具,最终将源代码编译成可执行文件或库。 可以把它们的关系想象成: Make 是工人 Makefile 是给工人的施工图纸 CMake 是 绘制施工图纸的工程师,他可以根据一份更通用的设计稿(CMakeLists.txt)生成适用于不同工地(操作系统 / 编译器)的详细图纸。 Makefile 并不跨平台,CMake 根据编译器类型来决定是否生成 Make file,大多数情况下 CMake 会生成 Makefile;Make 工具(类似批处理工具)是通过调用 makefile 文件中的命令实现编译和链接的。 1. MakeMake 是一个经典的、基于指令的构建工具。它本身并不知道如何编译程序。 它读取一个名为 Makefile 的文件,这个文件里定义了源代码文件之间的依赖关系以及构建规则(如何编译、链接)。Make 根据这些...
用户定义字面量
代码存储位置:shanchuann/Modern_CPP 在 C++ 中,用户定义字面量(User-Defined Literals ,简称 UDL) 是 C++11 引入的特性,允许开发者为特定场景定义自定义的字面量形式。通过 UDL,我们可以为数值、字符串等添加有意义的后缀(如 100m 表示 100 米、30s 表示 30 秒),让代码更直观、可读性更强。 从一个例子开始 类似于定义一个运算符重载 12345678910#include <iostream>using namespace std;void operator""_kg(const char* str, size_t) { cout << str << " 千克" << endl;}int main() { "10.5"_kg; // 调用自定义字面量 //10.5 千克 return 0;} 同样的,我们可以将他的返回值改为 string 类型 ...
若有来世
冬 苏秦负剑远望花妖国,青石砖筑城的城墙上万花开放,藤蔓互相纠缠攀附在墙根上向着城头赶去,互相争先恐后中有星星点点的蓝白色小花开放其中。 星璇花,无味但是剧毒,每朵花盛开的方向都是花妖国正中的那一个顶天立地的古树。 巨树参天,那是花神居住的地方,如同层层堆叠的阶级一般,花神高高在上俯瞰着 整个国度。 属于她的国度。 立柱一般的主干鼎立在天地之间,树枝直接长成的房屋周围不时有群鸟飞过,翅膀扇动云层划出一道道洁白的波纹。 …… “哗 ——” 一盆水泼在庭院中,冲走了最后的尘埃。 “花姐姐,院子打扫干净啦!” 苏秦放下木盆,对着房中的女子喊到。 被叫做花姐姐的女子抬起头,却明显是一张小孩的脸。 看着满头金发的小姑娘,苏秦还是忍不住揉了揉花菊的脑袋。 “你明明年龄比我大,为什么看着比我小呢?” 听到这话,花菊明显有些不自在,但还是被巧妙的掩盖了起来。 “怎嘛,女孩子长得慢一点不是很正常吗?再说了长得慢有什么不好,坐花车的时候还不用买票呢!” 花车是花妖国最主要的通行方式,大大小小的藤蔓轨道通向国中各处,虽然密集却也井井有条。 花妖国里并非都是花妖,因为适宜的气候和诗意的生活,也引来了无数...
成员指针
成员函数指针并非常规的指针 成员指针分为成员函数指针 和数据成员指针 。数据成员指针 /虚函数成员指针并没有真的指向一个内存 ,仅仅是表示在当前类,那个字段的位置 。如:&X::value 表示的只是这个数据成员value 在类X 中的位置。 数据成员指针 /虚函数成员指针是一种类似于偏移量 的东西,而成员函数指针真正的存储了一个地址。 成员指针无法脱离类的实例对象单独使用 ,无论是非静态数据成员指针还是非静态成员函数指针。 静态数据成员和静态成员函数不与类关联,不参与这个成员指针的讨论。 代码存储位置:shanchuann /Modern_CPP 成员函数指针123456789101112131415161718#include <iostream>using namespace std;struct X{ void f() { cout << "1"<<endl; }};int main(){ void (X:: * p)()...
默认实参
代码存储位置:shanchuann /Modern_CPP 声明在函数声明中,当我们想给函数形参声明为默认实参时,我们需要确保在当前作用域下 该形参后的形参也是_默认形参_ 。 12345678910//在函数声明中,形参若想声明默认实参,则应当确保当前或同一作用域下提前给其后面的形参声明了默认实参void f(int, int, int = 10);void f(int, int = 20, int);void f(int = 30, int, int);void f(int a, int b, int c) { cout << a << " " << b << " " << c << endl;}int main() { f();} 当我们将void f(int, int = 20, int); 移动至第一行时,会显示以下ERROR : 123void f(int, int = 20, int);void f(...
Gitbook使用指南
当我决定将我的学习笔记上传至Gitbook而不是直接上传至个人主页时,我将遭受到墓前所遇到的最大的阻碍。纵观全网在提到gitbook时,大部分都是本地gitbook init 后生成书籍,当想要在线浏览时更多的是与Github联动,然而我并没有找到有关于gitbook官方网站的使用办法,再加上我的翻译功能在此遭遇了机生最大的滑铁卢——翻译完全失效了! 所以我决定写一篇关于Gitbook官网,及在线编辑book的教程。 准备工作对于Github的安装和gitbook的安装想必前辈们已经总结出非常多样化的方法,各位按需拿取即可,本人在这里不做过多赘述,让我们直接进入目标环节 登陆我们可以直接打开GitBook – Build product documentation your users will love 网站,选择众多登陆方式中的一种,在这里我选择也推荐使用Github登陆 成功登入后选择来到Home界面,会看见布局如下图所示。 顶部功能与用户区 用户名 [yourname] :你当前登录的账号。 搜索、通知图标:用于搜索页面或查看通知。 平台功能入口 Home :平...
Cursor Meetup Xi'an活动纪实
2025 年 9 月 17 日晚,当邮箱里弹出 Cursor Meetup Xi’an 的活动通过通知时,我立刻敲定了参会计划 —— 对于渴望突破认知边界的开发者而言,这类汇聚实战经验与官方洞见的线下交流,其价值远胜于独自钻研的日常学习。 9 月 20 日星期六,西安市雁塔区丈八东路汇智立丰中心 12 号楼 12 层早已布置妥当,醒目的 “CURSOR” 标识与精心陈列的物料,让刚出电梯的参会者瞬间就能捕捉到活动的专业氛围。 Cursor Meetup Xi’an活动议程 13:30-14:00 签到14:00-14:10 开场 &致谢 &合照 👋14:10-15:30上半场分享 -14:10-14:20:影风 如何更深入使用cursor编程和工作 -14:20-14:40 小橘子 cursor编程指北-从开发一个安卓应用说起 -14:40-15:10 微风不燥 Cursor在办公场景的高效实践 -15:10-15:20 Cursor官方Q &A-15:20-15:40 茶歇 👋15:40-17:00下半场分享 -15:40-16:00 Lex ...
2048游戏设计
一 游戏玩法2048游戏共有16个格子,初始时初始数字由2或者4构成 手指向一个方向滑动,所有格子会向那个方向运动 相同数字的两个格子,相撞时数字会相加 每次滑动时,空白处会随机刷新出一个数字的格子 当界面不可运动时(当界面全部被数字填满时),游戏结束,或当界面中最大数字是2048时,游戏胜利 玩家通过合并得到1个数N,这个数就计分N,比如说,2个2合并得到4,就加4分,2个1024合并得到2048,就加2048分 二 设计思路游戏地图和初始设置: 使用一个 4x4 的二维数组 map 来表示游戏地图 初始时,所有位置的值均为0 score 记录玩家得分,move_num 记录移动次数 随机生成数字: 在地图上随机选择一个空位置生成 2 或 4 只有在地图发生变化时才会生成新数 游戏菜单: 使用 menu() 函数显示当前的游戏状态,包括地图、得分和移动次数 提示玩家使用 W、A、S、D 键进行移动 读取玩家输入,并根据输入的方向调用相应的移动函数 ( up()、left()、down()、right() ) 每个移动函数都负责处理特定方向的移动,并更新...