时而实践时而学习

Posted orange-C

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了时而实践时而学习相关的知识,希望对你有一定的参考价值。

读毛选、林语堂的《苏东坡传》和德鲁克的《卓有成效的管理》有感!提升自己的工作方法、管理方法和思想境界。

最近赋闲在家已经一个多月了,当时写了点总结,但觉得还不够,解不开心中的许多疑惑,就开始买书和看书。

这一个月,看了六本书。《毛*东选集》四册(后面简写为毛选),林语堂的《苏东坡传》和德鲁克的《卓有成效的管理》。《毛选》是新买的,14号下单,16号刚好收到,所以从17日开始看,到4月4日看完。从4月5日清明节开始看《苏东坡传》到11日夜里12日凌晨接近2点看完了;这本书在今年的1月份春节前买的,可能打算春节看,其实根本没时间。从4月12日上午开始看《卓有成效的管理》,到16日昨天上午看完;这本书刚好是去年上班前7月份买的,后面也没时间看书吧!如下图,依从从右往左读完六本,其他待读或细读。

 这六本书,基本上是细读,毛选有个别篇章没有细读外。时不时停下来,思考一下,做点笔记。这六本书都非常有感触!收获非常大。从毛选开始,其实就想停下来写写读后感,最后还是一口气读完六本。不过也挺好,每本书都不一样,都有不同的视角,但都是伟大或著名的思想家或哲学家,思想都有及其相似之处。也正是因为这样,最开始对于毛选和德鲁克的书,我真的有些望而生畏,看来还是自信心不够,高度不够。现在全部都完,最近这两天深深感觉到疲惫了!

 

读毛主席的文章非常震撼。多方面的震撼!

为他的乐观的革命主义精神所震撼。毛主席的才华其实从开始就显露出来了,可是当时情况特别复杂,而使毛主席的发展并不是特别的顺遂,比如说很多好的主张和方法得不到认可,但是毛主席却从没有任何悲观的情绪。到1935年的遵义会议,真正掌权后,看不出任何的起落和骄傲跋扈。仍然非常客观的、实事求是的分析中国的形势,提出非常精辟的论断和非常准确的预判。到后面抗日期间,我们从课本上学到日本的残酷的扫荡政策,而在毛主席的眼里那不是最坏的时候,党和红军发展的不错,大家的革命意识和思想空前的团结一致;而后毛主席在《论持久战》中,提到了抗日的三个阶段,都得到了证实。在积贫积弱(贫农占70&农民超过90%)的情况下,硬是推翻了三座大山,缔造了新中国。在这些过程中,显示出的是主席何等的自信、乐观、毅力和魄力!

为他丰富的调查研究所震撼。这四册第一、二篇就是从农村调查中写出的分析和总结,给当时的社会一个很好的定位。可是这后面需要多少的调查,才能得出这样的结论呢?而后面主席到西北继续强调调查的重要性,甚至提出了一些方法,怎么做调查,做了调查要开会议讨论,如何开会都有提及。我个人觉得,正是因为毛主席在开始投入革命不久就着手调查研究,给他提供了很大的能量,首先是方法,然后是数据,为他后面的自信和决策等奠定了基础。

为他的方法论和谆谆教诲所震撼。上述的调查研究是其中之一也是相当重要的方法,还有,有名的实践论和矛盾论、有名的批评和自我批评等等。主席不仅是把自己的经验总结出来,而且多次倡导大家学习:干部和知识分子要到群众中去学,大家要学现状、学历史、学马列主义并搞好这些理论研究和系统研究,甚至教大家如何开会、如何报告、如何领导,学如何搞经济工作、学如何建设城市等等;学习的目的是运用到实践中去!多想苦想、多分析做到有的放矢、实事求是。多次提到反对官僚主义、盲目主义和教条主义。这个学习内容、方法及目的是我远远没想到的,于我也是非常有现实意义的。我想对很多的平凡的人想提升自己的工作方法都是有现实意义的。主席还经常提到觉悟这个词,也是非常意外的。教导大家提高自己的觉悟,提高党的觉悟!我们有些东西是不是要重新捡起来?我们有些人现在反而开始迷信。主席说的对,我们需要时不时给自己的思想打扫一下,时刻保持清醒。何况党员呢?

为他丰富的著作所震撼。这四册书就是证明,可这只是其中一部分,我们熟悉的诗歌和书信还不算在其中。可见主席的文笔不一般。我们自己写文章就知道,每写一篇都不容易,最开始写博客就跟挤牙膏一样。所以非常佩服主席这么日理万机还能这么高产。小女子好奇的是,主席当年写文章可要列提纲和打草稿?

为他丰富的精辟的论断所震撼。主席提出了非常多的有名的论断,我想大家都耳熟能详:没有调查就没有发言权,枪杆子里面出政权,持久战的三个阶段,一切反动派都是纸老虎,农村包围城市等等。所以主席的文章不仅是产量高,而且质量高。这每一个论断都有文章对应,且非常详实。只有看了文章,才会理解更加深刻,才会明白怎么来的。之所以震撼,我想震撼的背后是主席深邃的思想,思想也不是一天两天来的,是长时间的日积月累;是主席熟读历史和经典文学,在文章中时常引经据典;是主席孜孜不倦的调查研究,是主席的深度分析和善于思考、善于抓住根本!如此反复而敏锐!

为他高超的军事艺术所震撼。毛主席军事方面,前期是保存实力、避其锋芒;后期是出其不意、以多胜少。这个多一般是3倍以上,但必须一次性歼灭敌人的80%(此次参战的),即歼灭敌人的有生力量。这个多也让我深感意外,我们学历史总是讲以少胜多的案例,一直以为毛主席作为军事天才应该也是这样。其实完全不一样,但是他的出其不意,同样为之震撼,比如北平的和平解放。

 

读《苏东坡传》情绪是很复杂的。跟着苏东坡的人生一样,跌宕起伏。苏东坡出生在北宋鼎盛时期宋仁宗时代,而去世的时候是北宋最后一个皇帝宋徽宗刚刚掌权,经历了五个皇帝。年纪轻轻才20出头就高中进士,而且是父子三人同时都中了,而后都留在了宋朝的体制里面,开始跌宕起伏的官宦生涯。所以该书与其说是个人的传记,不如说是讲述了宋朝由盛转衰的过程。对于我这样只从教科书里学了历史(而且还还回去了)缺少真正历史文化的人而言,非常有益。

感慨之一是培养一个文学天才需要土壤。而苏东坡出生的环境是具备这样的土壤的,当时赫赫有名的司马光、欧阳修等都是这个时期的,时间往前一点有同样如雷贯耳的包拯和范仲淹!宋朝想汲取唐朝的教训制定的国策之一是崇文抑武,所以文化非常的繁荣,连昏庸无能的宋徽宗诗词书画方面都有些造诣。

感慨之二宋朝不止是文化繁荣,经济也很繁荣,政治开明。经济繁荣体现在发明了造纸术和资本主义的萌芽。造纸术对于文化人和文化的传承是非常有利的,而资本主义的萌芽是商品经济的出现。夜市的繁华和酒宴歌舞伎文化的发展文中提到了一些,再联想一下清明上河图,不能不说北宋年间经济非常繁荣。北宋期间不止御史可以上奏,甚至在宋太祖期间任何人都有上奏的权利。而书中提到过司马迁和苏东坡在朝廷上经常争论,但两人并没有存在间隙。苏东坡也经常上奏,王安石变法期间陈述清议制的重要性。清议,简单说是社会舆论;御史,通俗说谏官,和清议差不多意思。当时很重视社会舆论,所以政治开明,思想自由。当然这只是北宋前中期,到宋哲宗就完全不行了,用作者林语堂的话说就是一白痴皇帝,幸亏是活得不久。

感慨之三苏东坡不止是文学造诣高,而且品德高尚。文学的造诣有很多耳熟能详的诗词,比如赤壁怀古的“大江东去,浪潮尽,千古风流人物。。。。。。”,寄给他弟弟苏辙的水调歌头的“明月几时有,把酒问青天。。。。。。但愿人长久,千里共婵娟”,怀念他的亡妻“十年生死两茫茫,不思量,自难忘。。。。。。”,还有“春江水暖鸭先知”、“不识庐山真面目,只缘身在此山中”等等。而作为大文豪,人品也是极好的,当官时,不止是与民同乐:修筑西湖苏堤、徐州治水、积极执行平仓制等,而且公益方面也做了很多事情:在杭州修建了自古以来第一座公立医院、在黄州建立当时的慈善机构收留女弃婴再转给愿意收养的农户等等。所以当苏东坡每离开一个地方时,老百姓纷纷出来相送。而不论是派到哪里还是被贬到哪里都有新老朋友,当地的太守往往成为新朋友,甚至是当地的道士。其中有一个道士叫吴复古,神出鬼没,只要苏东坡换了地方,他就能出现,带些苏东坡最关心的时事消息,并善意提醒,再陪伴苏东坡一段时间最后默默退出。他死在最后苏东坡从海南岛当时叫儋州的地方往北返回的路上,看到这里为他这么仗义的朋友的离开而感伤。不久苏东坡也去世了,而更加感伤。但是再回顾他这一生,我想也是值得了,除了才华横溢,除了自己的弟弟四海皆有知心朋友,真正是“不愁前路无知己”。能做到这样的有几人?我想除了他文学方面的造诣外和他自始至终不屈不挠和达观的精神是分不开的,所以被折服。

感慨之四王安石的变法和封建体制。作者是倾向于批判王安石而同情苏东坡。我特意在网上稍微查了下这段历史,我想两个都值得同情,都只是当时体制的产物而已,但站在历史的角度和现在的角度我们需要改革。查资料发现一件趣事,他两都是活了66岁,他两都是20岁出头就中了进士,他两都深信佛教,而王比苏大15岁。所以也说明了北宋文化的繁荣。王安石变法从宋神宗即位不久,而在这之前在地方为官政绩斐然,当时的皇帝也想招他入朝,但都被他婉拒。当时的宋朝虽然繁荣,但是国库财政紧张,每年对北方的辽和西夏进贡不少,财力大量外流,国库进一步空虚,所以有抱负的神宗和懂经济的王安石一拍即合。进行了一系列的变法,书上和网上都说是非常全面的变法,书上说的最多的是征兵制和青苗法,尤其是青苗法。青苗法就相当于金融改革,农民不需要从地主贷款改为从政府贷款买种子和农具等,等收割了再还本息。可贷款需要要有担保,所以出来了保甲法。但后面又变回了不得不请地主做担保,不仅违背了最初保护农民的想法,反而使农民的负担更重。书上的介绍,丰收的时候,农民不是喜悦而是为了躲避各种债务四处逃命。最后连身为前任宰相司马光和同样正直的大臣欧阳修都站出来反对,神宗开始犹豫。就这样开始坚持了四五年,再纠结了三四年,最后还是停止了变法的大部分。期间率直的苏东坡也上奏变法的种种弊端和一些悲惨的现象,最终因诗词中带有这些情绪被改革派抓住了把柄,因此被贬谪,从此开始跌宕起伏的生活。回头看王安石的性格人品。据书中描述是对物质没什么追求的,穿着邋遢,对吃也不讲究,吃菜只吃最近的一盘菜,下一餐别人换了菜都不知道!但非常的好学和喜欢思考,经常读书到深夜。很喜欢写日记,写了很多卷。所以从这些细节看,王安石是一个生活不讲究而一心一意研究政治财经的奇才。而他之前在地方为官时,他就开始着手进行变革,积累了丰富的经验,后面才提出了系列的系统的变法。但是除了神宗的支持,其他并没有多少支持他的,所以他提拔的都是些无名小辈和无才小辈,这些人心胸狭窄,作恶多端,这样和之前的重臣名臣的间隙越拉越大。所以我觉得王安石在用人方面和为人处世方面比较简单和单纯,我想这是他变法失败的一个很大原因。而另一方面这样系统的变法确实太过激进、太过理想了,从书中描述说的是近乎现代的集体经济政策,当时提出所有的贸易都归国家管!所以某个地方适合的政策,是不是全国都适合那不一定。而当时到底该怎么推行,我想当时的体制也是不支持的,因为封建社会,主要是靠人治,即使神宗像现在分步骤的试点再推广,那要多久呢,下面各级的官员是否如实执行呢,在这过程中如何监管呢,所以牵一发动全身;即使神宗这样做了,假如也取得了一定的效果,但是后面的皇帝呢?接下来的两个皇帝是远远不如神宗的。所以不管怎么样,这样的变法都不可能成功的。但是王安石的思想我觉得值得我们研究,在刚好一千年前就提出了这样的集体经济政策,不是天才是什么?我们需要创新,我觉得神宗了不起,至少给了他发光的机会,至少可以照耀后人继续思索。王安石罢相后,苏东坡经过他住的地方南京时去看过他,责问他因为他引起了党争而影响了国运,而王安石推脱说是吕慧卿发起的。和王安石脱不了干系,但是他自己怎么都想不到,变法没成功反而引起了持续不断的党争而后碰上两个昏君最后断送了北宋。为臣难也!

 

毛主席是体制从无到有的缔造者,难度可想而知,所以是为伟人也。

苏东坡是体制的产物,也是体制的受害者,但亦是天才也。

所以时代造就伟人,时代造就天才!

 

读《桌有成效的管理者》的视觉和感觉完全不一样,终于回到了现代!作者 彼得.德鲁克,美国人,一般简称为德鲁克,管理学大师中的大师。之前也看过一些管理方面的书,当时号称也是畅销书,比如《这就是OKR》、《高效能人士的七个习惯》(上图有)等等吧,但我都没有从头至尾的看完,可能看了一半。当时看的时候觉得还可以,但似乎没有很多让我有不一样的认知或者很深的感触,因为这些总结起来就是目标至上、聚焦自己而已,而这些观点似乎我在工作中时常总结。而德鲁克,很多次听说过他的大名,但是总有点怕跟前面这些书一样,或者是西方的不太好理解,或者是大师的作品道理太深奥理解不了,所以直到最近有时间想好好看看。这一看也放不下手了,又是一口气读完,原来非常的接地气、非常的普世。

首先,德鲁克对管理者的定义非常宽泛,简单理解就是脑力劳动者就是管理者。管理者不是传统意义上的一定要是主管以上,有一定人数的管理。因为现代社会知识分子越来越多,都是看不见摸不着的劳动,什么是有效,什么是成果,确实和之前传统意义上的管理体力劳动者完全不一样。

其次,德鲁克说管理者不是管理别人的时间,而是要管理自己的时间。所以紧接着提出了,如何管理自己的时间呢?现实生活中,我们有很多人总觉得时间都不知道跑哪儿去了。所以德鲁克有个很实际的方法,记录你的时间,持续记录几个月,每隔一段时间再记录。你会惊奇的发现,你很多时间花在并不重要的事情上。进而进一步提出,集中一段时间花在你真正重要的事情上。这里要注意的是,一段时间,不是零零散散的十几分钟,德鲁克多次举例,这个时间长度是90分钟,太短时间不够说不定还没进入状态呢,太长你的注意力已经无法再集中。我想这也是“要事在先”的原理和方法!这也是其他方法的基础,比如如何开会,比如着眼于贡献即目标。所以德鲁克多次提出,时间才是最稀有的东西! 所以有效的管理说到底就是有效的利用好你的时间。同时他还分析了危机和机会,也就是紧急的事情和重要的事情的取舍,一定是抓住机会,而不是被暂时的危机给迷惑了;因为机会稍纵即逝,还是时间的宝贵。

然后,德鲁克提出了如何发挥人的长处。这个人不仅仅是你自己或者下属,而更重要的是你的上级。助你的上司成功,你的工作自然而然会顺利很多。但是很多人对这个有误解,要么就是格局不够,以为自己和上司是竞争关系,要么就是以为是拍马屁,讨好上司而已。所以我的理解是,你要有更好的全局观,要以公司的利益为重,你要把上司看成一个普通人,他也需要有人发现他自己的优点,而不是拍马屁麻醉他,当然你可以说发现他的优点也是拍马屁,如果这样那说明你是情商高。所以这是质的区别。当然有个别人甚至很多人确实喜欢别人拍马屁,所以我们不说管理者,我们说领导,苦笑,国情不一样。

最后,德鲁克教我们如何做有效的决策。难的不是做决策,而是决策前的讨论以及方案的提出。没有充分讨论,没有反对意见,没有多个方案,不能叫做决策。没有完全一致的意见。而且德鲁克提出了反对意见的意义,反对意见可以激发我们的创造性。这一点震撼到我了,德鲁克的高度和境界果然不一样,所以德鲁克进一步提出,管理者应该主动询问和征求反对意见。你会感觉他提出的方法不是有多难,而恰恰是常识。再比如前面的记录你自己的时间。

所以,总的说来,德鲁克让我重新认识了什么是时间,什么是管理,什么是决策,什么是有效,什么是危机和机会。

 

开卷有益。这次开的卷,可不是一般的卷,受的也不是一般的益!这次古往今来的卷都有了,古今中外的卷也有了,受益匪浅!也解开了我心中的疑惑,我想我存在的主要问题还是经验特别是管理经验的不够,思想高度不够!往后希望自己再常读常新!

 

为啥在运行时而不是在编译时使用 constexpr 初始化变量

【中文标题】为啥在运行时而不是在编译时使用 constexpr 初始化变量【英文标题】:Why is initialization of variable with constexpr evaluated at runtime instead of at compile time为什么在运行时而不是在编译时使用 constexpr 初始化变量 【发布时间】:2021-05-05 11:42:48 【问题描述】:

据我了解,关键字constexpr 告诉编译器表达式的计算可以在编译时发生。具体来说,变量上的constexpr 意味着可以在编译时评估变量的值,而函数上的constexpr 意味着可以在编译时调用该函数并评估其返回值。如果函数在运行时被调用,它只是作为一个通用函数。

今天写了一段代码尝试使用constexpr

#include <iostream>

using namespace std;

constexpr long int fib(int n)

    return (n <= 1)? n : fib(n-1) + fib(n-2);


int main ()

    constexpr long int res = fib(32);
    // const long int res = fib(32);
    
    cout << res << endl;
    return 0;

我原以为代码的编译会花费很多时间,但我错了。编译只用了 0.0290s:

$ time g++ test.cpp
real    0m0.290s
user    0m0.252s
sys     0m0.035s

但如果我将constexpr long int res = fib(32); 更改为const long int res = fib(32);,令我惊讶的是,它在编译上花费了更多时间:

$ time g++ test.cpp
real    0m5.830s
user    0m5.568s
sys     0m0.233s

总之,似乎 const 使函数fib(32) 在编译时被评估,但constexpr 使它在运行时被评估。我真的很困惑。

我的系统:Ubuntu 18.04

我的 gcc:g++ (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0

【问题讨论】:

你真的要检查生成的程序集。 Godbolt 需要更多时间来使用 GCC 编译 const 版本,但两者都生成相同的程序集 (godbolt.org/z/rsq94a)。它绝对在运行时执行。 编译时间并不能很好地表明编译器是否在编译期间评估了表达式/函数。编译时间 - 对于任何版本的代码 - 也不一定是可重复的,因为其他执行进程可能会影响编译执行所需的时间。在得出函数调用已被内联的结论之前 - 无论哪种情况 - 尝试检查编译器输出。 您应该删除问题的最后 2 段。你关于更长编译时间的结论是错误的,但constconstexpr 花费更长的时间这一事实很有趣。请添加有关您正在使用的编译器和版本的详细信息。 启用优化后,两个版本的结果代码没有任何差异:godbolt.org/z/zTneae @cigien 谢谢,你是对的。我已经删除了它们。 【参考方案1】:

通过inspecting 生成的程序集,我们可以确认在两种情况 G++ 7.5 在编译时计算了fib(32) 值:

    movl    $2178309, %esi

G++ 如此快速地评估constexpr 上下文的原因是由于它在评估constexprtemplate 上下文时执行的memoization。

Memoization 通过将斐波那契计算复杂度降低到 O(N) 复杂度,完全消除了它。

那么为什么非constexpr 的评估会慢很多呢?我认为这是优化器中的错误/缺点。如果我尝试使用 G++ 8.1 或更高版本,编译时间没有区别,所以大概已经解决了。

【讨论】:

【参考方案2】:

编译时间短并不能证明调用未在编译时进行评估。您可以查看已编译的程序集,看看它实际上是在编译时使用 constexpr 在我的测试中评估的:https://godbolt.org/z/vbWaxe

在我使用较新编译器的测试中,const 的速度并不比constexpr 慢。这可能是您的编译器版本的实施质量问题。

【讨论】:

【参考方案3】:

快速编译时评估的秘诀在于,只有极少数的斐波那契数可以适合当今最大的数据类型 unsigned long long。

斐波那契数计算的基本信息是:根本不需要在运行时进行任何计算!一切都可以而且应该在编译时完成。然后,可以使用简单的查找机制。这将永远是最有效和最快的解决方案。

因此,使用比内特的公式,我们可以计算出只有 很少 斐波那契数可以适合 C++ unsigned long long 数据类型,该数据类型现在通常在 2021 年为 64 位,并且是“最大”的可用数据类型。 93 号环岛。现在这个数字真的很低。

借助现代 C++ 17(及更高版本)功能,我们可以在编译时轻松创建 64 位数据类型的所有斐波那契数的 std::array。因为如上所述,只有 93 个数字。

因此,我们将只为查找数组花费 93*8= 744 BYTE 的非运行时内存。这实在是微不足道。而且,编译器可以快速获取这些值。

编译时间计算后,我们可以很容易的通过写FIB[n]得到斐波那契数n。详细解释见下文。

而且,如果我们想知道,如果一个数字是斐波那契,那么我们使用std::binary_search 来查找值。所以,这个函数将是例如:

bool isFib(const unsigned long long numberToBeChecked) 
    return std::binary_search(FIB.begin(), FIB.end(), numberToBeChecked);

FIB(当然任何其他可能的名称)是一个编译时间,constexpr std::array。那么,如何构建这个数组呢?

我们首先将计算斐波那契数的默认方法定义为constexpr 函数(非递归):

// Constexpr function to calculate the nth Fibonacci number
constexpr unsigned long long getFibonacciNumber(size_t index) noexcept 
    // Initialize first two even numbers 
    unsigned long long f1 0 , f2 1 ;

    // Calculating Fibonacci value 
    while (index--) 
        // get next value of Fibonacci sequence 
        unsigned long long f3 = f2 + f1;
        // Move to next number
        f1 = f2;
        f2 = f3;
    
    return f2;

这样,斐波那契数可以在编译时轻松计算为constexpr values。然后,我们用所有斐波那契数填充std::array。我们还使用了constexpr 并使其成为带有可变参数包的模板。

我们使用std::integer_sequence 为索引0、1、2、3、4、5、...创建一个斐波那契数。

这很简单,并不复杂:

template <size_t... ManyIndices>
constexpr auto generateArrayHelper(std::integer_sequence<size_t, ManyIndices...>) noexcept 
    return std::array<unsigned long long, sizeof...(ManyIndices)>  getFibonacciNumber(ManyIndices)...  ;
;

这个函数将输入一个整数序列 0,1,2,3,4,... 并返回一个 std::array&lt;unsigned long long, ...&gt; 和相应的斐波那契数。

我们知道我们最多可以存储 93 个值。因此我们创建了一个 next 函数,它将使用整数序列 1,2,3,4,...,92,93 调用上述函数,如下所示:

constexpr auto generateArray() noexcept 
    return generateArrayHelper(std::make_integer_sequence<size_t, MaxIndexFor64BitValue>());

现在,终于,

constexpr auto FIB = generateArray();

将给我们一个编译时std::array&lt;unsigned long long, 93&gt;,名称为 FIB,包含所有斐波那契数。如果我们需要第 i 个斐波那契数,那么我们可以简单地写 FIB[i]。运行时不会进行计算。


整个示例程序如下所示:

#include <iostream>
#include <array>
#include <utility>
#include <algorithm>
#include <iomanip>
// ----------------------------------------------------------------------
// All the following will be done during compile time

// Constexpr function to calculate the nth Fibonacci number
constexpr unsigned long long getFibonacciNumber(size_t index) noexcept 
    // Initialize first two even numbers 
    unsigned long long f1 0 , f2 1 ;

    // calculating Fibonacci value 
    while (index--) 
        // get next value of Fibonacci sequence 
        unsigned long long f3 = f2 + f1;
        // Move to next number
        f1 = f2;
        f2 = f3;
    
    return f2;

// We will automatically build an array of Fibonacci numbers at compile time
// Generate a std::array with n elements 
template <size_t... ManyIndices>
constexpr auto generateArrayHelper(std::integer_sequence<size_t, ManyIndices...>) noexcept 
    return std::array<unsigned long long, sizeof...(ManyIndices)>  getFibonacciNumber(ManyIndices)...  ;
;

// Max index for Fibonaccis that for an 64bit unsigned value (Binet's formula)
constexpr size_t MaxIndexFor64BitValue = 93;

// Generate the required number of elements
constexpr auto generateArray()noexcept 
    return generateArrayHelper(std::make_integer_sequence<size_t, MaxIndexFor64BitValue>());


// This is an constexpr array of all Fibonacci numbers
constexpr auto FIB = generateArray();

// All the above was compile time
// ----------------------------------------------------------------------


// Check, if a number belongs to the Fibonacci series
bool isFib(const unsigned long long numberToBeChecked) 
    return std::binary_search(FIB.begin(), FIB.end(), numberToBeChecked);


// Test
int main() 

    const unsigned long long testValue 498454011879264ull ;

    std::cout << std::boolalpha << "Does '" <<testValue << "' belong to Fibonacci series?  --> " << isFib(testValue) << "\n\n";

    for (size_t i; i < 10u; ++i)
        std::cout << i << '\t' << FIB[i] << '\n';

    return 0;


使用 Microsoft Visual Studio Community 2019 版本 16.8.2 开发和测试

使用 gcc 10.2 和 clang 11.0.1 进行了额外测试

语言:C++ 17

【讨论】:

以上是关于时而实践时而学习的主要内容,如果未能解决你的问题,请参考以下文章

ajax请求发送成功但不进success,或者时而进时而不进的解决方法

2020年目标

XP系统时而自动进入用户登录界面

如果基本情况不是在恒定运行时而是在多项式运行时运行,主定理是不是适用?

Qt:在编辑 QTableView 项目数据时而不是在编辑完成后发出信号?

在运行时而不是在编译时绑定的 __CLASS__ 版本