问题描述
C++ Core Guidelines 推荐 gsl::not_null
类型。如I.12: Declare a pointer that must not be null as not_null
中所述:
帮助避免取消引用 nullptr 错误。通过以下方式提高性能 避免对 nullptr 进行冗余检查。
...
通过陈述意图 源、实施者和工具可以提供更好的诊断,例如 通过静态分析发现某些类别的错误,并执行 优化,例如删除分支和空测试。
(如果有兴趣,这是微软对 gsl::not_null
的实现:GitHub)
指南文档说它通过“删除分支和空测试”来帮助提高性能。但是,它也增加了开销,因为如果我想访问底层指针,将调用方法 operator->()
和 operator*()
(这不包括 Microsoft 实现在这些方法中的运行时检查开销)。
解决方法
但是,它也增加了开销,因为方法 operator->() 和 operator*()
除了这些函数是内联定义的并且非常小,因此优化器(很可能)会内联扩展它们,这将完全消除潜在的开销。
该文档如何得出净性能增益为正的结论?
正如您所引用的,该文档甚至没有承认相关的开销,因此这样的结论是微不足道的。
如果您的意思是文档的作者是如何得出这样的结论的,那么只有这些作者知道。它的范围可能从“他们测量了它的影响”到“他们做了一个假设”。