绑定和释放引用

作者讲述了自己与std::optional<T&>相关的经历和思考,主要内容如下:

  • 引发思考的事件:2018 年末,作者作为“委员会成员”参加会议后,致力于解决“应清理std::optional内的引用”等问题,在 C++Now 2018 上与几人交流后决定实施,却未深入了解情况。之后在“反射器”中发布关于研究optional references的消息却无人回应,进行调查后发现被误导。
  • 两种主要方向:在讨论optional中引用的处理方式时,主要有“Assign-through”和“Rebind”两种方向,Boost 早期决定optional<T&>应 rebind,而 Jonathan Müller 认为“assign-through”是错误行为。
  • 个人经历与教训:2013 年作者在构建 ray tracer 时遇到问题,最终发现是因为对optional<T&>的错误理解导致赋值覆盖,之后作者未向库实现者提及此事,羞愧于自己的错误。
  • 错误假设与调查结果:作者一直认为std::optional<T&>应 assign-through,直到调查发现只有少数人支持这种方式,且很多人只是口头支持却未实际使用,这让作者意识到所谓的“魔法独角兽”并不存在。
  • 委员会会议经历:2018 年 C++Now 会议上,作者提出关于optional<T&>的论文,因担心引起争议而妥协,在会议中因缺乏数据和研究而处于劣势,最终撤回论文。
  • 对社区的影响:委员会对std::optional的“中立”选择(移除引用支持)给社区带来了负面影响,许多公司和代码库为此付出了代价,如 porting 困难等,尽管有一些人坚持 rebinding optional references,但也有一些人认为不应存在optional<T&>
  • 未来展望:作者表示不会再提交关于此主题的论文,希望 MISRA C++在这场战斗中一切顺利,同时赞扬了像 TartanLlama 这样进行高质量实现和研究的人。

总的来说,作者通过自己的经历揭示了std::optional<T&>相关问题在委员会和社区中的复杂情况以及带来的不良影响。

阅读 12
0 条评论