作者讲述了自己与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&>
相关问题在委员会和社区中的复杂情况以及带来的不良影响。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。