Category: 学习笔记

C++中的 const和constexpr 比较

C++ const 与 constexpr:真正的区别是什么? 一眼看都是定义常量。 为什么这很重要 现代 C++ 鼓励编写不可变、高效且表达力强的代码。两个关键字—const 和 constexpr—是这一理念的核心。它们看起来很相似,但理解它们的不同语义,对于正确利用编译期与运行期行为至关重要。 高层次对比 特性 const constexpr 编译期常量? 可能 一定(否则编译报错) 支持运行期? 支持 支持(在需要时运行期求值) 用于数组/模板参数? 仅当确实是常量 保证可用 允许函数? 仅限成员函数限定符 支持完整函数且可在编译期求值 1  声明不可变数据 const:构造后不可变 …

C++ Ranges 教程

C++20 引入了 ranges(范围),这是一个强大且优雅的抽象,用于处理序列(如数组、vector 等)。相比传统的迭代器或旧式循环,Ranges 提高了代码的可读性、可组合性和性能。 什么是 Range? 在 C++20 中,range(范围) 是一种抽象,代表一个可以迭代的元素序列。它与 views(视图) 和 actions(操作) 如过滤、转换等配合使用非常自然。 传统循环 vs 基于 Range 的循环 #include <iostream> #include <vector> int main() { std::vector<int> v …

简易教程: C++的智能指针

C++ 智能指针教程 C++ 中的智能指针提供了自动且安全的内存管理。它们通过 RAII(资源获取即初始化)机制,帮助开发者避免内存泄漏和悬空指针的问题,确保对象在生命周期结束时被正确释放。 本教程将介绍 C++ 中三种主要的智能指针: std::unique_ptr:独占式所有权 std::shared_ptr:共享式所有权 std::weak_ptr:非拥有式弱引用 1. std::unique_ptr unique_ptr 拥有独占所有权。一个资源只能被一个 unique_ptr 拥有。 示例:管理简单对象 #include <iostream> #include <memory> int main() { std::unique_ptr<int> p = std::make_unique<int>(42); …

Alan Becker 的动画教学视频是非常好的启蒙材料

自从去年家里装修完之后,我们在厨房装了一台电视,平时吃饭时会随便看看一些视频。大约两个月前的一天中午,我从学校接弟弟回家吃饭,无意间发现了一个叫 Alan Becker 的动画视频系列——“Animation vs.”,是 YouTube 上的一个非常有创意的系列。他最出名的作品之一就是《Animation vs Math》。 Alan Becker 的这些视频通常用一群小人(也有人叫他们“小黄人”、小橙色、火柴人)在电脑屏幕上互动的方式,讲述一个个富有创意、又带有教育意义的故事。虽然整个系列几乎没有一句对白,但却通过画面和动作把复杂的知识点讲得既直观又有趣。 我最喜欢的四个视频是《Animation vs Math》、《Animation vs Coding》、《Animation vs Physics》和《Animation vs Geometry》。每一集不仅让人捧腹大笑,还让人对背后的知识产生兴趣。比如在《Animation vs Math》中,小人们在坐标系、函数图像之间跳跃和作战,看得人不知不觉就理解了各种数学概念。而《Animation vs Coding》则展示了编程的魔法,小人甚至“黑进”了主人的电脑,自己写代码!《Animation vs Physics》里,小人们挑战了牛顿定律、重力和能量守恒,用夸张但合理的方式演绎了物理知识。 《Animation vs …

比特币私钥的数学本质与人类算力的极限

总是看到有一些暴力破解的程序在不停的尝试比特币钱包的密钥,还声称已经很幸运的试到了几个钱包的密钥,并且移走了里面的几万美金。 下面的文字是抄于 rssdao.eth 的朋友圈。 抛256次硬币,你就拥有一个比特币私钥:人类算力难以企及的加密奇迹 破解比特币需要40亿个银河系?普通人根本无法想象的数学深渊。 当你抛硬币正面朝上为1,反面朝上为0,连续抛256次,并把结果转换成一个16进制数,就是下一个比特币的密钥,那么换句话来说,比特币私钥的本质就是256位二进制数,听起来普普通通有没有,感觉用普通的计算机随便就能破解了? 能这么想的一般数学老师已经哭在了厕所,2的256次方,相当于8个2的32次方相乘,二的32次方约等于40亿,现在有概念了吗?就是40亿×40亿×40亿×40亿×40亿×40亿×40亿再除以40亿。量化一下吧,第一个40亿是现代电脑的GPU每秒可以计算10亿个哈希值,40亿就相当于一台非常好的电脑,每秒计算的哈希值。 第二个40亿用世界第一搜索引擎,谷歌公司作为例子,虽然谷歌没有对外公布服务器的数量,但有人估算大约在几百万个,是世界上最多服务器的企业之一,代表着地表最高算力,大部分谷歌服务器的算力都不如我们这些满载GPU的电脑强,那么40亿台电脑姑且约等于1000个谷歌算力。 第三个40亿全世界约有73亿人,我们假设地球一半以上的人每个人都有1000个谷歌的算力。再来看看第4个40亿,想象一下40亿个这样的地球像极了银河系有没有?姑且称为银河系算力。第5个40亿,我们把40亿个这样的银河系打包,算力之和每秒能计算出2的160次方。第6第7个40亿,我们从时间维度考量,40亿秒约等于126.8年,乘以40亿倍,就是5070亿年,差不多是目前我们已知的宇宙年龄的37倍。 最后我们得出了结论,以人类现在的文明程度要解开比特币的密钥,大约需要40亿个银河系的算力,计算37倍于宇宙的年龄一样长的时间,才有1/(40亿^8)可以算出密钥的可能。所以现阶段人类科技而言,要通过技术手段破解密钥,简直就是痴人说梦了,这种体量的计算连量子计算机串联也望尘莫及。 2021年2月旧文,再思考一下比特币的伟大发明。 今天一个大饼的价格是9.2万美金。 Satoshi Nakamoto’s Wallet 为了1110亿美元,你愿意付出多大的代价? 如果有人猜对了 24 个单词,如果有人能访问中本聪的钱包,就能卷走大约 1110 亿美元,成为全球第 15 大富豪。 但这真的可行吗? 一个 24 字的 BIP39 …

BASH: 如何使用 cURL 命令获取 HTTP 响应代码?

检查运行 curl命令 后的HTTP响应代码,您可以使用 curl 的 -w` 选项,这样可以指定自定义输出格式。以下是命令: curl -o /dev/null -s -w "%{http_code}\n" <URL> 您可以将HTTP响应代码保存到BASH变量中,如下所示: resp=$(curl -o /dev/null -s -w "%{http_code}\n" <URL>) 解释: -o /dev/null: 丢弃响应体的输出。 -s: 以静默模式运行curl(不显示进度或错误信息)。 -w …

经济危机? 美股币圈房产全面下跌

这两天真是没心情工作啊(微博),大概是因为特朗普宣布全面加征关税的消息影响太大了。币圈的大饼已经跌破了8万美元,整个市场一片哀嚎。股票也没好到哪里去,连一直坚挺的微软股价都跌到了350美元左右。 说实话,看着账户上的数字一点点缩水,真的有种无力感。原本还想着这波行情能挺一挺,结果现在连避险资产都开始动摇。朋友圈也开始沉默了不少,以前天天讨论行情的人,现在连消息都不怎么发了。市场的信心好像一夜之间被抽空了。 也许现在最需要的不是盯盘,而是静下心来,重新评估自己的投资策略。毕竟风雨过后才知道谁在裸泳。希望能熬过去吧。 股票群跌了20%要跳楼,币圈群跌了95%还在说现货不怕呢。特朗普的顾问说:“股票只要不卖,就不算亏”。 还好我的币都是现货,我不敢玩也不会玩杠杆,所以只要不卖,就有可能会东山再起的时候。 这几年房价走势相对平稳,主要有两个原因:一方面,英国政府对房东出台了不少新政策,增加了持有成本;另一方面,在“现金为王”的大环境下,很多人选择出售房产变现。再加上物价持续上涨,房价并没有像预期中那样大幅升值。 近期博文: Bought some dip: 1673.6835 STEEM at Price 0.1066 House Price in Cambridge in the Last 2 Years Crypto News: Is there any …