核心cpp指南中f(T*,int)接口与f(span <T>)接口的含义

Joe*_*Joe 1 c++ cpp-core-guidelines

核心cpp指南的第P3节在其执行部分下提供了以下模式:

f(T*,int)接口与f(span)接口

任何人都可以解释它对于想要了解现代C++的硬老C程序员意味着什么?

小智 6

第P3节是关于"快速意图".因此,这个想法更明确地表达了意图.

考虑f(T*, int).我们要问:

  1. 指针指向单个对象还是数组?
  2. 整数是代表数组大小还是其他什么?

信息在功能签名中没有很好地表达.它必须通过其他方式获得,例如文档,命名约定等.

另一方面,当我们看到f(span<T>)有明确且无可置疑的意图时:该函数采用数组(通过span<T>对象引用).意图很明确,因为这是唯一的目的span,不像指针是多用途的.

因此,f(span<T>)如果打算采用数组,则表明意图更好.

  • 除了你提出的问题之外,我还要添加"指针可以为空吗?",以及"所有权语义是什么?" (后者的答案*应该是*调用****拥有数据 - 但是有足够的遗留API仍然是一个人不得不问的问题). (3认同)