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

Meaning of f(T*, int) interfaces vs. f(span<T>) interfaces in core cpp guidelines

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

f(T*, int) interfaces vs. f(span) interfaces

任何人都可以向想要了解现代 C++ 的固执的老 C 程序员解释这意味着什么吗?

P3 部分是关于 "Express intent" 的。因此,这个想法是哪个更清楚地表达了意图。

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

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

函数签名中的信息没有很好地表达。它必须通过其他方式获得,例如文档、命名约定等

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

因此,f(span<T>) 如果意图是采用数组,则可以更好地说明意图。