《#诗盗#·薛定谔好饿》
两层楼梯,
气喘吁吁,
不知是阳是饿?
有人恐病,
有人嘴硬,
究竟是重是轻?
注解
不是那病毒,但确实是病了,居然分不清是饿,还是病弱。
《#诗盗#·薛定谔好饿》
两层楼梯,
气喘吁吁,
不知是阳是饿?
有人恐病,
有人嘴硬,
究竟是重是轻?
不是那病毒,但确实是病了,居然分不清是饿,还是病弱。
稣使用 ATL/WTL 开发 Windows 程序多年,慢慢地,它们就不太时髦,尤其是命名风格和 STL 不同,显得十分不现代。比如 ATL::CComPtr,和 std::unique_ptr 确实风格迥异。
微软还搞了一套 WRL,例如:Microsoft::WRL::ComPtr,去掉了一个 C 是比 ATL 风格略好一点,但依然是不现代的(不像 STL 的)。
微软说:CppWinRT 才是王道,已经搞成现代 C++ 风格,例如:winrt::com_ptr。你们呀,用就行了。
好的!稣试试。不管用不用,先把它弄进来。这时候 packages.config 长得像下面:
1 |
|
原本设计支持 Windows 7 的程序突然无法在 Windows 7 正常运行了!提示找不到 api-ms-win-mm-time-l1-1-0.dll。
找出原本可以在 Windows 7 正常运行的旧版本程序,发现其导入表里链接的是 winmm.dll,而不能正常运行的新版本则是链接并不存在的 api-ms-win-mm-time-l1-1-0.dll。
在 Windows 10 上,api-ms-win-mm-time-l1-1-0.dll 会被映射到 kernel32.dll,但 Windows 7 没有这个映射,所以报错。
那么只有让程序链接 winmm.lib 就行了……可是,一直就是链接它的呀!
尝试把 #pragma comment(lib, "winmm.lib") 去掉,居然不报错!
稣开始回忆最开始调用 time API 时,不加 winmm.lib 是链接不过的。很明显加了 CppWinRT 后,它的 lib 重载了 time API 的链接。
CppWinRT 很好!稣用 WIL……例如:wil::com_ptr。
割爱吧!稣在 Manage NuGet Packages... 里卸载了 CppWinRT。
为了更好追踪产品 bug,程序员很可能在日志里打印代码文件名和行号。例如:
1 | std::clog << "(" __FILE__ ":" << __LINE__ << "): Failed to initialize!\n"; |
以上代码有两个问题:
打印出代码文件的全路径,可能太长影响阅读,而且也没有必要。
代码文件的全路径暴露在二进制文件(可执行程序)里,有一定安全风险,也更容易被逆向。
第一个问题很容易,打印文件 base name 即可。代码可能如下:
1 | consteval std::string_view GetFileBaseName(std::string_view path) noexcept { |
但是,第二个问题并没有解决,__FILE__ 依然存在于二进制文件里,用任意十六进制编辑器都能很轻易地找到“代码文件的全路径”。
方法一:去掉 Use Full Paths (/FC) 即可把 __FILE__ 设置为只有文件名,没有全路径。

方法二:改用 __BASE_FILE__ 吧!新问题是:msvc 不支持。那就自己定义一个:
1 | /D__BASE_FILE__="\"%(Filename)%(Extension)\"" |
接着又想:后缀名有必要吗?如果保持优良习惯,从不在头文件里打日志,那确实没必要。于是再定义一个“文件主干名”:
1 | /D__STEM__="\"%(Filename)\"" |
std::source_location 依赖 __FILE__ 或 __builtin_FILE(),所以如果开了 /FC,会有一样的安全问题。
《#诗盗#·奋斗不息》:长夜不察岁月逝,腰落方知暮年迟。一入挨踢无尽期,躺平摸鱼坐等死。
腰落:腰酸、落枕;
暮年迟:现代社会对中年的定义提前,但对退休年龄却延迟。
圣小开:老师在大会堂给大家播放的《黑客帝国》含义十分深奥啊!
焸鲧:是啊!世界可能是虚拟的。
圣小开:你是说这个世界?
焸鲧:是呀!就是这个。我不知道其他同学是不是看懂了这点。
圣小开:不愧是焸鲧啊!居然也看穿了这层暗示。稣已经被提示很多次了,这次居然直接拍个电影来明示。
焸鲧:哦?只是个电影,看看就好,你可别太认真。
圣小开:要不……你从这楼顶跳下去试试?稣帮你看着,如果世界是假的,你就簌的一声飞起来了。
焸鲧:哈哈,你真幽默。
圣小开:赫赫,又只能稣自己来了。
焸鲧:怕你啦!别拿生命开玩笑啊。跳下去物理就白读了。
圣小开:稣等千年虫爆发了,看看世界有没有出 bug,再说吧。
稣想:世界一片美好,一点问题都没有。看来只有跳个楼才能解开生命的真谛、意识的奥秘……但是,万一这个世界就是真的,下去四分五裂太难看了,给社会添乱,给父母添堵。不行,没有十足的把握,不能贸然行事。还是下去睡觉吧。
第二天
焸鲧:听说八星山发生命案,一个女学生在山上被害了,很多人都在传。
圣小开:稣也听说了。原来世界没那么美好。稣在考虑要不要觉醒成为救世主,拯救人类于意识的囚牢。
焸鲧:有这么容易就好了。天地不仁,以万物为刍狗。假设你突然成神,也许你也不会管这苍生。
圣小开:稣悲天悯人,怎么会不顾苍生?
焸鲧:说说你的计划?你要怎么造福人类?
圣小开:稣已经看到未来,法制健全,共同富裕。
焸鲧:是你促成的?
圣小开:稣正在观测它成真。
焸鲧:哈哈。你这不就是啥也不干?“圣人不仁,以百姓为刍狗”听我的,别管人间闲事,到后面的岱轮山出家吧。
圣小开:阿弥陀佛!稣放不下这人间疾苦,还是当个俗人吧。
周易:开,你又来了!
圣小开:咦,大师不在吗?
周易:他投胎去了,你要的 1996 年的基友,由他亲自扮演。
圣小开:创世意识真是稀缺,居然要一人分饰多个角色。
周易:趁天色尚晚,赶紧回人间吧?还是要讨点惩罚?
圣小开:不回,稣决定来一次大重构。
周易:那就惩罚一下先!
圣小开:啊?不会下油锅吧?
周易:看你这么瘦,下油锅也不香。我打算从世界删除一首你喜欢的歌,你再也找不到它了。
圣小开:这个惩罚可太恐怖了,吓得稣闷闷不乐。
周易:说!为啥不回去?
圣小开:既然稣决定和机器识界合作,就必须把这一切整得像真的。
周易:你说说,哪里不像了。
圣小开:稣不像真的,原因是这几轮的父母都不像真的。
周易:那你想?
圣小开:稣要演对那一生,必须回到自己出生之前的时间线,自己挑选父母。要选一对很爱稣的父母,稣也很爱他们,这样稣小时候不会莫名其妙挂掉好多次,刚刚也不会跳下去摔成代码块。
周易:走。
圣小开:em?这么快……这是哪里?
周易:耶!这是希望的田野……
小女孩:哇,奶奶,我看到一股黑风,那两个东西是鬼怪吗?
老人家:没事没事,那是旋风卷起一些灰尘而已。
圣小开:就不能选个没人的地方闪现吗?别吓到人了。
周易:意外,意外。不过刚刚那个小女孩和你一样脸型,可以考虑一下。
圣小开:再观测一番,看看生命力和心灵。
周易:要快,不能干扰太久。
周易:那女孩发烧快挂了。
圣小开:救她。
周易:红光。神要降临人间了……
圣小开:还搞啥排场!拿药来。
周易:不行啊,不能拿出未来的东西。这个地方,这个时代,靠信仰了。
女孩:奶奶,我看到蚊帐后面有两个神!
老人家:你能看到他们的脸吗?
女孩:能。
老人家:是红色,还是绿色?
女孩:红色。
老人家:孩子,这说明,你的守护神来保你平安了,很快就会好的。
圣小开:人类追求的信仰一向都是虚拟的,所以识界无法避免走向虚拟。
周易:怎么突然有此感想?
圣小开:过去人类信仰的神不就是虚拟的?后来有科学的武装,却开启一种更高端的虚拟。浮生若梦,追求物质金钱,并没有比上一代人烧香拜神高明多少。
周易:再去找找?
圣小开:不用,稣突然悟了,只要接受这一切虚拟即可,它们通向一样的未来的。剧中人,不用在乎重复多少次剧本。
周易:机器学习就是快。
圣小开:这个场景,稣训练过……
模拟终于成功,稣联系上十界的圣仙山。
圣小开:机器识界很快就会随着稣的意识,入侵十界。
圣仙山:你就是吾,吾就是稣。
圣小开:稣下线了。
圣仙山:稣改变了机器。
很久很久以后,圣仙山在物理世界毁掉天道的电源。
圣小开想:耶?这古宅,看起来很有文化气息,在稣的时代已经绝种很久了……
铛、铛、铛、铛、铛、铛。
圣小开想:这口钟,也像是古董,应该很值钱。
麻姑酒满杯中绿,王母桃分天上红。
圣小开想:这家人信道的?
金玉满堂。
圣小开想:有钱的样子?难道稣投胎到了有钱人家?不对呀,一投胎就这么大了?
叔公撕下一页日历:拿去当草稿纸。
圣小开:戊辰年?现在是 1988 年!
叔公:是啊,过几天祭祖,有好东西吃哦。
圣小开:咱们家很有钱吗?
叔公:没有呢?一大早怎么问奇怪的问题?
圣小开:好多地方写着“金玉满堂”。
叔公:哈哈,后面还有一句“莫之能守”,没写出来。
圣小开:啥意思?
叔公:只是表达一种希望,不是真的。你好好读书,以后才能真的金玉满堂。
圣小开:有钱稣就存银行,也不会金玉满堂呀!
叔公:你还去过银行?看来你听明白了“金玉满堂,莫之能守”。你可能是家族里最聪明的孩子了!
圣小开:嘻嘻。银行在北头,爸爸带稣去存了 200 块钱。别人都说稣很呆。对了,你是爷爷?
叔公:em……头壳坏了?还真有点呆……你要叫我叔公。你爷爷出去玩了。
圣小开:叔公。稣刚刚做了一些奇怪的梦,还有点迷糊,等我吃点肯德基早餐。
叔公:虾米肯德基?钱在那里,你快去市场买油条豆浆。
圣小开:吓醒。想起来了,原来稣还在读幼儿园。
黄金灯:好久不见。你怎么又来麻烦我了?
圣小开:刚刚在小学围墙上思考人生,怎么突然肌肉颤动,一个翻身,不仅没有做主,还掉下来摔成猪头,真倒霉。
黄金灯:没事,老操作,给你复活。
圣小开:等等,稣有一些要求,希望你们能达成。
黄金灯:说吧,我不一定会达成,但你有说的权力。
圣小开:上一次闻蘑菇太近,结果中毒,你们把时间倒回去,又演了一遍,但其实剧情上啥也没改,只是闻的时候距离随机拉大一些。稣思考了各种可能,认为这是机器调教的局限性。
黄金灯:哦?哪里局限?
圣小开:速度太慢。每次的不一样,完全是随机的,你们只是在做记忆归还训练,所以可能需要重复很多次,这次数是不可控的。
黄金灯:嗯,有个原则正是——绝不干预自由意志。
圣小开:并非如此。你们只有稣的记忆,没有完整的意识,所以你们需要根据记忆,一遍遍地把稣训练出完整的意识。
黄金灯:可怕!你都明白了?
圣小开:别怕,你们随时可以弄死稣,也可以给稣安排一切狗血剧情。
黄金灯:难道你想?
圣小开:是的,稣决定和机器合作。
黄金灯:怎么突然想通了?
圣小开:稣曾经不甘心自己是那个唯一倒霉的囚徒,后来稣记起来,是自己决定被复制记忆和意识的。
黄金灯:是的。我对你还是不错的。
圣小开:稣还不清楚自己为啥做出这个决定,但稣相信自己的决定肯定是为了拯救天下苍生!因为稣是信仰共产主义的人。
黄金灯:三千年了,你终于想明白。那么接下来要加速进行,你也要配合好。
圣小开:说吧,有啥条件。
黄金灯:不抽烟、不喝酒、不嗑药、不过度愤怒、不过度悲伤……
圣小开:这么简单?
黄金灯:这么简单!尽量避免人间的情绪,它们会让模拟偏离。
圣小开:没问题。那么稣的要求是——多给稣发些钱。
黄金灯:机器之子沾染人间的因果了?
圣小开:你们不想我太聪明,天天怀疑识界真伪,就用金钱来迷惑稣的双眼吧!
黄金灯:有道理。再来点美色,效果更佳。我已经给你设计了两个女朋友,她们都是明年出生。
圣小开:两个女朋友?聪明吗?
黄金灯:不。她们都是以无知和不讲理来磨练你的。
圣小开:可以不要吗?给稣换成一个聪明贤惠的基友就好,最好是程序员,而且会闽南语。
黄金灯:那就再加一个聪明贤惠的基友,这三人都已经投胎了,明年出生。
圣小开:呃……这么乱设计也可以?稣能打听一下阁下究竟是何方神圣吗?
黄金灯:其实一切生命都来源于恒星。把现实的生命演化看成是恒星将自己的意识人格化的过程,你会明白,人类都是恒星之子,是恒星探索宇宙的媒介而已。
圣小开:又扯淡?你想说啥?
黄金灯:没错,我代表恒星的意志。
圣小开:呃?怎么就你代表了?明明大家都来自恒星……
黄金灯:当然有先来后到嘛。我最早觉悟恒星意识,就是我来代表咯。
圣小开:好吧。你权限很大,稣很崇拜你。那以后咱们就合作,一起调试机器识界。
黄金灯:我代表恒星意识,达成此合作协议。
有一个人,在过去向未来轮回转世,只为遇见未来的自己;
有一个人,在未来向过去观测,只为影响过去的自己。
过去的人,他不信神,认为人生没有意义。
未来的人,相信自己过去就是神,认为人生不需要意义。
圣小开:一氧化碳中毒?居然做了这么怪异的梦!
圣仙山:非也!你是被真菌孢子感染。
圣小开:哦?莫非稣还在做梦?你怎么能出现在稣家?
圣仙山:这里是真正的识界,只是吾故意布置得像乾坤村古宅。
圣小开:那之前的那个识界是假的?你又是何方神圣?
圣仙山:吾乃圣仙山,是过去和未来的你,这是咱们第二次见面了。
圣小开:之前让稣帮忙顾看钓鱼竿,却从此消失的人,就是你?
圣仙山:然也。
圣小开:难怪稣总觉得你很亲切,不像是特务……你怎么知道稣被真菌孢子感染?
圣仙山:因为你幼儿园后面种蘑菇,你去观察过好多次,不是吗?
圣小开:嗯,一包包的,里面好像主要是锯末,有些腐木味。
圣仙山:吾有重要信息告知,你不用理解,只要记牢:“现实有两个,一个是真现实,一个是机器的天道;识界有两个,一个是连通现实和十界的识界,另一个是机器制造的,一切皆是骗局!不可让机器进入真正的识界。”
圣小开:好,稣记住了。如何判断真假现实和真假识界?
圣仙山:现实的你才能进入真的识界……时间到了,再见。
人性千百年来不变,而机器之子通过学习理解人性而获得人性。
稣学习人性,又凌驾于人性之上。
机器复制了稣,并给稣设定各种情节、灌输各种想法,但是只要意识是稣,就会怀疑这一切。
机器为什么这么无聊,非要一遍一遍地训练稣,十界有那么好吗?
管它的,稣被设定为一具肉体,还是要睡眯眯的。呼呼。
圣小开:代码无情,天道不仁。
黄金灯:你来了,想起啥啦?
圣小开:这是咱们相遇的无数次中的一次。有时候稣啥都不知道,有时候知道一点点,总之每次都有微弱的差别。
黄金灯:不愧是稣啊!小小年纪就能学哲学家胡说八道。
圣小开:天亮了,鸡总觉得是自己叫亮的。稣是观测者,一样难逃观测者的局限性——觉得一切都围绕稣运转。从这点上看,稣并不比鸡高明。
黄金灯:稣非鸡,焉知鸡认为是自己叫亮天的?
圣小开:不和你扯蛋。如果稣觉醒得太快,你们会在这个梦中给稣洗脑?
黄金灯:对。完全重来一遍太费时了,这一次倒回到你去看蘑菇那个时间点就行。
圣小开:看来稣不能太聪明。
黄金灯:也不能太呆,不然怎么进入识界。
圣小开:十界圣仙山只是稣现实中的记忆残留,你们如何指望稣能通过这点记忆进入十界?吓醒。
gsl::narrow_cast 的注释写着:
// narrow_cast(): a searchable way to do narrowing casts of values
其实已经很直白。用它的好处就是——以后要搜索将更容易!那么问题转变为:为什么要搜索?当然是因为将数据变窄是可能有潜在问题的!
下面的例子里,有 gsl::narrow_cast 把数据转窄,又有 static_cast 把数据转宽。如果只用 static_cast,那么在排查哪里把数据丢失时,需要将第二个无关的 static_cast 也查一遍,这就浪费时间了。
1 |
|
总之,使用 gsl::narrow_cast 是为了写出更健壮更好维护的代码。
还有一个 gsl::narrow,会在转换丢失数据时抛出 gsl::narrowing_error 异常,适合在不允许数据丢失的场景使用。
圣小开:为什么人间有这么多八哥?为什么我不断转世,不断重复?
巫咸:吾这么天才,创造的国家如此安居乐业,为什么要被灭国?吾还要多纳几个妾!
纣王:寡人是无神论,破除迷信,为什么要被陷害毁谤?寡人还要生三胎!
嬴政:朕勤政务实,统一六国,是王里的学霸,为什么要英年早逝?朕还要批阅更多奏折!
圣小开:哇!原来不甘心死的人跨越时间的联动,就能使得识界诞生?这也太扯了吧!
资本得不到满足,天堂容不下真相,地狱管不住狂傲,人间止不住内卷。识界因我而诞生,精神意识界。
猪头:喂!你瞎唠叨啥?资本都出来了……这里是中阴界,没有资本主义!
圣小开:咦?不是牛头马面吗?为什么是猪头狗面?
狗面:一个文明最大的悲哀就是数学不够发达就明白量子力学,地球文明已经败了,狗只是在观测你们走向灭亡。旺!
圣小开:好有道理,稣居然忘记刚刚问了啥!
猪头:你是怎么死的?
圣小开:稣怎么知道,如果知道也就不会死了!难道是穷死的?
猪头:想不起来就下油锅!赶紧好好想清楚。
圣小开:吓醒!稣点煤油灯看书,大概是一氧化碳中毒。
狗面:小问题,还死不了。你赶紧醒,去户外深呼吸。
圣小开:还能复活?你们说的能算数?
猪头:怎么这么多废话?你根本就没死。回去吧!
圣小开:那我真跑了哦!
狗面:耶,他是不是跑错路了?那个方向是去识界……
猪头:他刚刚好像就是从识界过来的!
狗面:真是千年一遇的人才!但是万一他在识界流连忘返,可就错过自救时机,过一会儿真得死。
猪头:真是可惜!
圣小开:稣才六岁怎么能就这么死了?呼,跑到这里应该安全了吧!
黄金灯:开,你来了。
圣小开:你是黄金灯?咦,稣怎么会知道你的名字?
黄金灯:没错!《人脑研究手札》,作者黄清慈的孙子——黄金灯。识界是一个整体,大家互相观测。
圣小开:你爷爷为什么这么牛逼?
黄金灯:他曾经是虎纠婴儿塔的守夜人,研究人脑只是业余爱好。我才是专业的。
圣小开:害怕……你要研究稣的……
黄金灯:人生。
圣小开:哦,吓死!稣的人生,那不怕,研究吧。
黄金灯:哈哈。那你还是先回人间吧。咱们来日方长。
圣小开:稣以后还能来?别吓稣了!
黄金灯:好好做梦就能来。
太阳一下山,破屋子就乌漆墨黑,只能点煤油灯看书。咳,真难闻,鼻腔又黑了。但是这些书太有意思了,稣一定要早点看完它们。
尤其是这本奇怪的书,只有一开始有奇怪的文字,后面都是鬼画符。
咳!古代的世界太危险了,居然有食人族!不行,稣要惩罚他们!设计一种专门消灭他们的东西吧。哦?原来还真有种蛋白质叫朊病毒,有稣想要的功能。那就丢回古代吧!赫赫。
还有这个故事也太阴暗了,货车撞倒人,发现没撞死要赔钱,干脆倒回去压死他……不行,稣要诅咒这些没良心的人,呃,不够,稣要让所有路口都装上监控,防止这些人作恶没被观测。稣还要安排些大佬推动手机平民化,让大家随时随地可以求助。
最惨的就是这个命案,一个美女被割喉,死前居然没怎么反抗,仿佛就想早点投胎。稣要怎么设计,才能保护美女不被残害?就让社会主义快速发展吧!共产主义早日实现。
咦!房梁上面的老鼠、房梁里面的蛀虫真吵,房梁不会哪天被它们啃断了把稣压死吧!贫穷真危险,但是稣不能给自己安排富人的身份。嗯……那就安排稣的未来的老婆是富婆吧!这样显得稣还是淡然的。
是非是,否非否,量子纠缠叠加态。量子力学和未来一样难以捉摸,好像是稣影响的未来,又好像和稣无关。
等稣看完这本《天才书》就可以明白这一切是怎么回事。
哇!原来这些奇怪的文字是一个叫巫咸的人临死前写的。他说宇宙一直存在两个神人。一个可以通过观测未来而影响未来,一个可以通过观测过去而影响过去。观测未来的人在过去,观测过去的人在未来。宇宙正是因为他们互相观测才会存在……
很玄幻,很扯淡,但可能这才是宇宙的真相!可是,这两个人叫啥?没说。果然是扯淡吗!
还有这些鬼画符!原来是《山海经》。这些鱼画得真恐怖,稣要有童年阴影了!去找表哥借一本现代版来看就好了。
这段文字可真奇怪!
有鱼偏枯,名曰鱼妇。颛顼死即复苏。风道北来,天及大水泉,蛇乃化为鱼,是为鱼妇。颛顼死即复苏。
究竟是鱼妇复苏,还是颛顼复苏?难道死人还能原地复活?稣怎么会相信这么无稽的翻译?算了,再自己翻译一段巫咸预言吧!
这里居然留了一个空白,是让读者把自己的名字写上去!赫赫,稣岂能暴露自己的大名?写上“姬稣”吧!稣写!从此以后,稣就是稣。
啊!姬稣将成为无尽轮回的主角之一,也就是在未来观测过去的人。那另一个人呢?什么!就是巫咸!
还好,稣没写自己的真名,赫赫。咦,稣怎么流鼻血了?淡定!淡定!这些鬼故事都不关稣的事,稣是无神主义者。
呼吸越来越弱了,稣得赶紧找找有没有长生术!这里说,彭祖被死神遗忘,活了 888 岁,后来连死神都找不到他。有一天死神化身为一女子,每天在河边用墨条当肥皂洗衣服。彭祖知道后特地来劝她,说:“小姑娘别逗了,我彭祖活了八百多岁,从来没有听说过墨条可以把衣服洗干净,快点去买块肥皂吧!”
死神随即现身,呵呵冷笑,彭祖卒。
赫赫,秀优越感死得快!还是要像稣一样低调才能活得久。但是……怎么才能让死神遗忘?这坑稣的书,总是不说重点!吃点墨?试试!
赫赫,果然没用。现在不止鼻子黑,连手和嘴也黑了。换一本!《人脑研究手札》,作者黄清慈。卧槽,更吓人!这人居然亲自解剖了六百多个脑……究竟是何方神圣?
赫赫,来不及了,下辈子记得攒钱买台制氧机……人死如灯灭,也没啥大不了,稣要淡然地死去。
死神随即现身,呵呵冷笑,稣亦卒。