c++ Core Guidelines推荐使用gsl::not_null
类型。如I.12所述:声明一个不能为空的指针,如not_null
:
帮助避免解引用nullptr错误。通过以下方式提高性能避免对nullptr进行冗余检查。
…
通过在源代码、实现者和工具可以提供更好的诊断,例如通过静态分析找出一些类的错误,并执行优化,例如删除分支和空测试。
(如果有兴趣,这是微软的gsl::not_null
实现:GitHub)
指南文档说,它通过"删除分支和null测试"来提高性能。但是,它也增加了一个开销,因为方法operator->()
和operator*()
将被调用,如果我想访问底层指针(这还不包括微软实现的运行时检查在这些方法中的开销)。
既然不能保证方法内联,文档如何得出净性能增益是正的结论?
但是,它也增加了开销,因为方法operator->()和operator*()
除此之外,这些函数是内联定义的并且非常小,因此优化器将(很可能)内联扩展它们,这将完全消除潜在的开销。
文档如何得出净性能增益为正的结论?
正如你所引用的,文档甚至不承认相关的开销,所以这样的结论是微不足道的。
如果你的意思是文件的作者如何得出这样的结论,只有这些作者知道。它的范围可能从"他们测量了它的效果";他们做了一个假设。